如何在保持背景颜色的同时以XAML按钮样式应用我的模板?

时间:2016-04-19 14:07:30

标签: c# xaml win-universal-app

我在Styles.xaml文件中有以下样式:

<Style x:Key="MainViewButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <SymbolIcon Symbol="{TemplateBinding Content}" Foreground="#FFF7F7F7" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Background" Value="#FF55677F"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="Height" Value="40"/>
</Style>

当我启动项目时,会应用模板,因为按钮包含他们的Content SymbolIcon,但即使在模板后面的样式中指定了它们,它们也没有任何背景颜色。它们只是透明的。怎么样?

1 个答案:

答案 0 :(得分:1)

您的控件模板会覆盖您设置的任何样式。如果您的ControlTemplate不尊重样式,则不会得到任何设置。

您可以将背景设置器和其他设置器置于模板设置器上方,然后使用TemplateBinding设置SymbolIcon内的属性。如果您的SymbolIcon没有任何背景属性,唉,您无法做到。

但是,您可以使用Border并将SymbolIconIn放入其中。我就是这样做的:

<Style x:Key="MainViewButton" TargetType="Button">
    <Setter Property="Background" Value="#FF55677F"/>
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="Height" Value="40"/>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border Background="{TemplateBinding Background}" Height="{TemplateBinding Height}">
                    <SymbolIcon Symbol="{TemplateBinding Content}" Foreground="#FFF7F7F7" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

</Style>