禁用“IsEnabled=false”;按钮上的颜色变化

本文关键字:按钮 颜色 变化 IsEnabled false 禁用 | 更新日期: 2023-09-27 18:08:05

我想避免按钮被禁用时的颜色变化。按钮的颜色应该是相同的,无论是否禁用。

使用一个样式,我可以改变背景颜色,当它被禁用:

<Style TargetType="{x:Type Button}">
...
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        ...
        <ControlTemplate.Triggers>
         ...
          <Trigger Property="IsEnabled" Value="false">
            <Setter TargetName="Border" Property="Background" Value="#EEEEEE" />
            <Setter TargetName="Border" Property="BorderBrush" Value="#AAAAAA" />
            <Setter Property="Foreground" Value="#888888"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

我可以在那里改变背景色,但我想让它保持动态,因为背景色是绑定的,不应该改变。

如果我删除背景设置,则执行默认的背景颜色更改。

如何禁用颜色更改?或者至少让Disabled-Background-Color绑定?

对不起,我的英语不好。

禁用“IsEnabled=false”;按钮上的颜色变化

如果你想让它的数据绑定最合适的地方,imo,是在你的控件的相对DataTmplate中声明它,在那里你指定Style(已经由你定义)和数据应用到控件。

在那里你可以定义一些你的状态和你想要出现在按钮上的相对颜色之间的转换器。

如果你想把自己限制在Style中,你可以在Style本身中定义一个数据绑定。我不太符合逻辑,但是这是可能的。

看看这个答案:

通过WPF中的MVVM图案更改按钮背景颜色

我知道这有点晚了,但希望它能帮助到一些人。下面是我设置样式的方法:

<Style TargetType="Button">
...
  <Style.Triggers>
     <Trigger TargetType="Button" Property="IsEnabled" Value="false">
       <Setter TargetName="Border" Property="Background" Value="#EEEEEE" />
       <Setter TargetName="Border" Property="BorderBrush" Value="#AAAAAA" />
       <Setter Property="Foreground" Value="#888888"/>
     </Trigger>       
  </Style.Triggers>
</Style>

您需要在触发器中再次包含TargetType,否则您将得到一个异常。