WPF 中的嵌套样式

Nested Styles in WPF

我想在 WPF 中嵌套 Styles。

我有一个资源字典:

<Style x:Key="BottomButtonBar" TargetType="{x:Type Grid}">
  <Style TargetType="{x:Type Button}">
        <Setter Property="Margin" Value="10,2" />
        <Setter Property="Width" Value="90" />
    </Style>

    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="HorizontalAlignment" Value="Center" />
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Margin" Value="2,0"/>
    </Style>
</Style>

我想要的是:如果我在网格上应用样式 "BottomButtonBar",则此网格内的按钮具有我定义的 MarginWidth 并且相同此网格内的 TextBlock。

怎么做?

如果要给Grid中的元素添加样式,可以将样式隐式添加到Grid的资源中,限制其范围:

<Grid>
  <Grid.Resources>
    <Style TargetType="{x:Type Button}">
      <Setter Property="Margin" Value="10,2" />
      <Setter Property="Width" Value="90" />
    </Style>

    <Style TargetType="{x:Type TextBlock}">
      <Setter Property="HorizontalAlignment" Value="Center" />
      <Setter Property="VerticalAlignment" Value="Center" />
      <Setter Property="Margin" Value="2,0"/>
    </Style>
  <Grid.Resources />

  <Button ... />
</Grid> 

我终于找到了以下解决方案:

<Style x:Key="BottomButtonBar" TargetType="{x:Type Grid}">
    <Style.Resources>

        <Style TargetType="{x:Type Button}">
            <Setter Property="Margin" Value="10,2" />
            <Setter Property="Width" Value="90" />
        </Style>

        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="Margin" Value="2,0"/>
        </Style>
    </Style.Resources>
</Style>

并且在 XAML 中:

    <Grid DockPanel.Dock="Bottom" Style="{DynamicResource BottomButtonBar}">