【问题标题】:WPF button's common style for "Enable" and "Disable" statesWPF 按钮的“启用”和“禁用”状态的通用样式
【发布时间】:2016-09-03 08:01:32
【问题描述】:

我尝试为启用或禁用 WPF 按钮设置通用样式:

    <Style x:Name="btnStyle" x:Key="btnStyle" TargetType="{x:Type Button}">
        <Setter Property="Foreground"  Value="#FFFFFFFF"/>
        <Setter Property="BorderBrush" Value="#FFCFFFFF"/>
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="True">
                <Setter Property="Style" Value="{DynamicResource btnStyle}" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Style" Value="{DynamicResource btnStyle}" />
            </Trigger>
        </Style.Triggers>
    </Style>

还有我的按钮:

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

这会在运行时产生以下异常。

"Style object is not allowed to affect the Style property of the object to which it applies."

如何将这种通用样式应用于按钮的两种状态?我可以在不使用样式覆盖按钮模板的情况下做到这一点吗?

【问题讨论】:

    标签: .net wpf xaml exception button


    【解决方案1】:

    您的 btnStyle 是一种样式,例如,您在启用或禁用时要更改的所有属性都在触发器中

     <Style x:Name="btnStyle" x:Key="btnStyle" TargetType="{x:Type Button}">
        <Setter Property="Foreground"  Value="#FFFFFFFF"/>
        <Setter Property="BorderBrush" Value="#FFCFFFFF"/>
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="True">
                <Setter Property="Content" Value="Enabled" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Content" Value="Disabled" />
            </Trigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

    • 我不想改变风格。我只是希望它是相同的,无论状态是否改变。
    【解决方案2】:

    我在@adminSoftDK 的回答的帮助下找到了我的解决方案。我在两个触发器属性上设置了相同的样式。

    <Style x:Key="btnStyle" TargetType="{x:Type Button}">
        <Style.Triggers>
            <Trigger Property="IsEnabled" Value="True">
                <Setter Property="Foreground"  Value="#FFFFFFFF"/>
                <Setter Property="BorderBrush" Value="#FFCFFFFF"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Foreground"  Value="#FFFFFFFF"/>
                <Setter Property="BorderBrush" Value="#FFCFFFFF"/>
            </Trigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

      猜你喜欢
      • 2020-10-09
      • 2010-12-04
      • 2015-04-19
      • 2023-04-05
      • 2013-11-23
      • 2014-12-02
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      相关资源
      最近更新 更多