XAML部分造型?

时间:2016-06-28 17:30:56

标签: c# wpf xaml

我有这些控件:

<Border Style="{StaticResource Button}">                
    <TextBlock>NEW</TextBlock>
</Border>
<Border Style="{StaticResource Button}">
    <TextBlock>CLOSE</TextBlock>
</Border>
<Border Style="{StaticResource Button}">
    <TextBlock>EXIT</TextBlock>
</Border>

这种风格:

<Style x:Key="Button" TargetType="{x:Type Border}">
    <Setter Property="Padding" Value="15, 10" />
    <Setter Property="Margin" Value="5, 0" />
    <Setter Property="MinWidth" Value="150" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Cursor" Value="Hand" />                
        </Trigger>
    </Style.Triggers>
    <Style.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="VerticalAlignment" Value="Center" />
        </Style>
    </Style.Resources>        
</Style>

我想将每个按钮/边框设置为每个特定的不同颜色,并为IsMouseOver设置另一种颜色。

我尝试在控件上设置Background,但是样式无法覆盖背景,我无法进行IsMouseOver更改。 我只能想到为每个人用他们的颜色创造一种不同的风格,但无论如何要做一个部分样式,就像你在CSS中做的那样?

<div class="button blue">NEW</div>
<div class="button red">CLOSE</div>
<div class="button gray">EXIT</div>

还是以其他方式实现这一目标?

1 个答案:

答案 0 :(得分:3)

我有一段时间没有做任何XAML,所以我有点生气。我很确定你不能做部分样式,但我知道你可以使用“BasedOn”继承样式。

https://msdn.microsoft.com/en-us/library/system.windows.style.basedon(v=vs.110).aspx

这将允许您执行基本按钮样式,然后根据常用样式功能为您需要的每种颜色创建颜色变体。

<Style x:Key="Button" TargetType="{x:Type Border}">
    <Setter Property="Padding" Value="15, 10" />
    <Setter Property="Margin" Value="5, 0" />
    <Setter Property="MinWidth" Value="150" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Cursor" Value="Hand" />                
        </Trigger>
    </Style.Triggers>
    <Style.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="VerticalAlignment" Value="Center" />
        </Style>
    </Style.Resources>        
</Style>

<Style x:Key="ButtonBlue" TargetType="{x:Type Border}" BasedOn="{StaticResource Button}">
    <Setter Property="Background" Value="Blue" />
</Style>

类似的东西,然后你使用“ButtonBlue”而不是“Button”作为你在XAML中为你想要变成蓝色的控件引用的静态资源。您应该能够在继承样式中添加触发器。希望我能正确记住我的语法。

此外,您可能希望将样式键更改为“按钮”以外的其他内容。可能有点混乱。