2013-10-10 3 views
1

В текущем окне у меня есть сетка с несколькими элементами управления (метки, текстовые поля, кнопки). Общие стили установлены в App.xaml. Расширения для каждого элемента управления задаются в ресурсах Grid. Каждая видимость управления определяется значением свойства viewmodel. Не привязывать к ним видимость каждого элемента управления (он использует собственный конвертер, и это приведет к многократным дублированиям). Я хочу иметь стиль «MyVisible1».Как создать стиль для расширения, но не переопределить другие стили

Проблема в том, что если я применяю этот стиль, он перекрывает другие свойства. Какую ценность следует использовать в «BasedOn»? Или что еще я могу сделать для его реализации?

<Grid> 
    <Grid.Resources> 
     <Style TargetType="{x:Type Control}" x:Key="MyVisible1"> 
      <Setter Property="Visibility" Value="{Binding ...}" /> 
     </Style> 

     <Style TargetType="Label" BasedOn="{StaticResource {x:Type Label}}"> 
      <Setter Property="HorizontalAlignment" Value="Right" /> 
     </Style> 
     <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}"> 
      <Setter Property="Width" Value="80" /> 
      <Setter Property="HorizontalAlignment" Value="Left" /> 
     </Style> 
     <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> 
      <Setter Property="Width" Value="45" /> 
      <Setter Property="HorizontalAlignment" Value="Right" /> 
     </Style> 
    </Grid.Resources> 

    <TextBox Grid.Column="0" Grid.Row="0" Style="{StaticResource MyVisible1}"/> 
</Grid> 

ответ

0

Единственный способ, который я могу себе представить, что вы можете сделать, это определить локальный неявное Style для этого:

<Style TargetType="{x:Type Control}"> 
    <Setter Property="Visibility" Value="{Binding ...}" /> 
</Style> 

К не образующим x:Key, это Style будет неявно применяется для всех элементов управления, которые расширяют класс Control и объявляя его локально, он будет применяться только к тем элементам текущей области фокуса. Поэтому определение этого раздела в разделе Grid.Resources косвенно применит его ко всем элементам управления в пределах этого Grid. Затем вы можете применить любые дополнительные Style s, которые вы хотите к этим элементам управления.

+0

У меня будет несколько стилей видимости. В этом случае ваше предложение не помогает. ( – Julia

+0

Когда я впервые начал писать WPF, я всегда получал много дублированного кода в разных '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' что это часто невозможно. Затем я понял, что WPF довольно подробный язык по сравнению с другими, и что действительно не имеет значения, дублируем ли мы несколько байтов или даже килобайт кода. – Sheridan

Смежные вопросы