使用样式来操作WPF按钮,但要有选择性



我在我的WPF窗口有几个按钮控件,它们都有自己的目的,但需要根据它们的意义/任务来设计不同的样式。我知道使用样式,您可以使用TargetType全局样式按钮。

但是如果我想有选择地样式按钮呢?

计算器示例:一些按钮表示数字,其他按钮表示函数,如加法、除法。比如我想让数字按钮是绿色的,函数按钮是蓝色的。

我的方法是继承Button和自定义按钮控件,NumberButton, FunctionButton,然后使用<Style TargetType="{x:Type my:NumberButton}">等。

有没有更好的方法,不那么"hack"?这可以在样式定义中选择性地完成吗?

谢谢。

如果你想把所有的东西都放在一个隐式的Style中,那么一个解决方案可能是使用ButtonTriggerTag属性对不同的值进行不同的设置

<Style TargetType="{x:Type my:NumberButton}">
    <Setter Property="Background" Value="Red"/>
    <Style.Triggers>
        <Trigger Property="Tag" Value="GreenBackground">
            <Setter Property="Background" Value="Green"/>
        </Trigger>
    </Style.Triggers>
</Style>

按钮的位置

<my:NumberButton Tag="GreenBackground"/>

当在WPF中使用Style s时,我们可以通过声明它们隐式应用,而不声明x:Key:

<Style TargetType="{x:Type SomeType}">
    ...
</Style>

这将隐式地应用于所有类型为SomeType的控件。Style s也可以通过声明x:Key:

来显式地应用。
<Style x:Key="SomeStyle" TargetType="{x:Type SomeType}">
    ...
</Style>

<SomeType Style="{StaticResource SomeStyle}" />

这个SomeStyle将只应用于这个控件。有关详细信息,请参阅MSDN上的样式和模板页面。

为你的样式添加标识符可以防止它们被"全局"应用:

<Window.Resources>
    <Style x:Key="NumberButton" TargetType={x:Type Button}/>
    <Style x:Key="FunctionButton" TargetType={x:Type Button}/>
</Window.Resources>

你现在可以通过引用每个按钮的特定样式的名称来按照你想要的方式设置按钮的样式:

<Button Style="{StaticResource NumberButton}"/>

最新更新