2016-04-13 2 views
0

я получил несколько StackPanels в моем приложении, которые хотят, чтобы их дети, чтобы применить определенные стили:WPF Автоматически назначать стили для детей через родительский стиль

<StackPanel.Resources> 
    <Style TargetType="TextBlock" BasedOn="{StaticResource SettingLabel}" /> 
    <Style TargetType="DockPanel" BasedOn="{StaticResource SettingRow}" /> 
    <Style TargetType="CheckBox" BasedOn="{StaticResource SettingCheckBox}" /> 
    <Style TargetType="PasswordBox" BasedOn="{StaticResource DialogPasswordBox}" /> 
    <Style TargetType="TextBox" BasedOn="{StaticResource DialogTextBox}" /> 
</StackPanel.Resources> 

Вместо того чтобы писать эти 5 строк снова и снова я, хотя давать StackPanel сам стиль, который применит их и, следовательно, уменьшит избыточность.

Это не представляется возможным установить Resources в стиле сеттер, потому что это не свойство зависимостей:

<Style x:Key="SettingPanel" TargetType="StackPanel"> 
    <Setter Property="Resources"> 
     <Setter.Value> 
      <Style TargetType="TextBlock" BasedOn="{StaticResource SettingLabel}" /> 
      <Style TargetType="DockPanel" BasedOn="{StaticResource SettingRow}" /> 
      <Style TargetType="CheckBox" BasedOn="{StaticResource SettingCheckBox}" /> 
      <Style TargetType="PasswordBox" BasedOn="{StaticResource DialogPasswordBox}" /> 
      <Style TargetType="TextBox" BasedOn="{StaticResource DialogTextBox}" /> 
     </Setter.Value> 
    </Setter> 
</Style> 

Так есть ли другой способ сделать это без того, чтобы установить стили на каждого ребенка и повторить назначение стилей?

ответ

3

Вы можете определить стили в Style.Resources из StackPanel. Они будут применяться ко всем детям StackPanel, используя StylePanel как стиль.

<Style x:Key="SettingPanel" TargetType="StackPanel"> 
    <Style.Resources> 
      <Style TargetType="TextBlock" BasedOn="{StaticResource SettingLabel}" /> 
      <Style TargetType="DockPanel" BasedOn="{StaticResource SettingRow}" /> 
      <Style TargetType="CheckBox" BasedOn="{StaticResource SettingCheckBox}" /> 
      <Style TargetType="PasswordBox" BasedOn="{StaticResource DialogPasswordBox}" /> 
      <Style TargetType="TextBox" BasedOn="{StaticResource DialogTextBox}" /> 
    </Style.Resources> 
</Style> 

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

  • Нет связанных вопросов^_^