设置默认样式并在XAML中命名

时间:2017-12-19 22:01:18

标签: wpf xaml

我知道如果您指定x:Key属性,则可以设置默认样式。 (因此它适用于TargetType

中指定类型的所有元素

我想使用密钥进行继承(BasedOn属性),但仍保持默认值。 我想创造另一种基于前一种风格的风格。像这样:

<Style TargetType="Button" x:Key="name">
        //...
    </Style >
    <Style TargetType="Button" BasedOn="name"/>

但如果有更简洁的方法,我会更喜欢它。

2 个答案:

答案 0 :(得分:2)

您可以使用 {x:Type} 标记扩展名设置其名称:

  <Style TargetType="{x:Type Button}" x:Key="{x:Type Button}">
            <Setter Property="Background" Value="Red"/>
  </Style>

这种方式它仍然是隐式样式,但您现在可以继承它。

这是一份完整的工作样本:

 <Window.Resources>
        <Style TargetType="{x:Type Button}" x:Key="{x:Type Button}">
            <Setter Property="Background" Value="Red"/>
        </Style>

        <Style x:Key="AnotherStyle" TargetType="Button"  BasedOn="{StaticResource {x:Type Button}}">
            <Setter Property="FontSize" Value="22"/>
        </Style>
    </Window.Resources>

    <Grid Background="DimGray" Name="Grid" DataContext="{Binding ExpandoObject}">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Button Grid.Row="1" Content="LOL" Style="{StaticResource AnotherStyle}"/>
    </Grid>

修改 如下面所述,您不需要设置x:Key,因为您可以使用x:仅键入

来访问它

答案 1 :(得分:-1)

您使用StaticResource:

 <Style TargetType="Button" x:Key="name">
   //...
 </Style >
 <Style TargetType="Button" BasedOn="{StaticResource name}">
   //...
 </Style >