使用样式来操作WPF按钮,但是有选择地

时间:2014-06-10 08:55:07

标签: c# wpf templates styles custom-controls

我的WPF窗口中有一些按钮控件,它们都有自己的用途,但需要根据其含义/任务进行不同的设置。 我知道使用样式你可以使用TargetType全局样式按钮。

但是如果我想选择性地设置按钮呢?

计算器示例:某些按钮代表一个数字,其他按钮代表一个功能,如添加,分割。所以我想说数字按钮为绿色,功能按钮为蓝色。

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

有没有更好的方法,而不是“黑客”?这可以在样式定义中有选择地完成吗?

谢谢。

3 个答案:

答案 0 :(得分:0)

在WPF中使用Style时,我们可以声明它们是由隐式应用而不是声明x:Key

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

这将隐式应用于SomeType类型的所有控件。 {em}也可以声明由声明Style明确应用:

x:Key

...

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

<SomeType Style="{StaticResource SomeStyle}" /> 仅适用于此一个控件。有关详细信息,请参阅MSDN上的Styling and Templating页面。

答案 1 :(得分:0)

如果您想将所有内容保存在一个隐式Style中,那么一个解决方案可能是使用Tag的{​​{1}}属性和Button不同值的不同设置器

Trigger

你按钮的位置是

<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>

答案 2 :(得分:0)

在您的样式中添加identifier会阻止它们被应用&#34;全局&#34;:

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

现在,您可以通过引用每个按钮中特定样式的名称来按照自己的方式设置样式:

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