对特定类型的所有子元素应用样式

本文关键字:元素 应用 样式 类型 | 更新日期: 2023-09-27 17:52:47

我想为wpf写一个样式,其中所有按钮在一个状态栏(有一个定义的样式)有相同的样式(例如宽度)。

我的样式如下:

<Style TargetType="{x:Type StatusBar}"
               x:Key="DialogBoxStatusBarStyle">
    <Setter Property="Background"
                    Value="LightGray" />
    <Setter Property="Padding"
                    Value="5" />
    ...?
</Style>

和元素的xaml:

<StatusBar Style="{StaticResource ResourceKey=DialogBoxStatusBarStyle}" Grid.Row="3"
               FlowDirection="RightToLeft">
        <Button Content="Übernehmen"
                Width="100"
                HorizontalAlignment="Right" />
        <Button Content="Abbrechen"
                Width="100"
                HorizontalAlignment="Right" />
        <Button Content="OK"
                Width="100"
                HorizontalAlignment="Right" />
    </StatusBar>

在最终版本中,我不想将所有按钮的宽度设置为100。这应该以StatusBar的样式定义,或者更好地说,以StatusBar的按钮子样式定义。

对特定类型的所有子元素应用样式

你可以为你的DialogBoxStatusBarStyleResources添加一个默认的按钮样式:

<Style TargetType="StatusBar" x:Key="DialogBoxStatusBarStyle">
    <Style.Resources>
        <Style TargetType="Button">
            <Setter Property="Width" Value="100"/>
        </Style>
    </Style.Resources>
    ...
</Style>

要扩展上面的答案(@Clemens),您甚至可以这样做,独立地重用按钮样式,并将其应用于特定容器的子元素。

样式:

<Style TargetType="{x:Type Button}" x:Key="MyButtonStyle">
    <Setter Property="Width" Value="100" />
    <Setter Property="HorizontalAlignment" Value="Right" />
</Style>
<Style TargetType="{x:Type StatusBar}" x:Key="DialogBoxStatusBarStyle">
    <Setter Property="Background" Value="LightGray" />
    <Setter Property="Padding" Value="5" />
    <Style.Resources>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource MyButtonStyle}" />
    </Style.Resources>
    ...
</Style>