【问题标题】:How to reset a WPF control's default opacity toggling via IsEnabled after setting opacity explictly?如何在明确设置不透明度后通过 IsEnabled 重置 WPF 控件的默认不透明度切换?
【发布时间】:2015-09-04 12:42:30
【问题描述】:

当我禁用一个控件(按钮)时,它太黑了,很难阅读文本。

所以我使用扩展方法将不透明度设置为 1.0 (100%),以便即使禁用时也可以轻松阅读:

public static void IsEnabledSpecial(this System.Windows.UIElement control, bool isEnabled) {
    control.IsEnabled = isEnabled;
    control.Opacity = 1.0;          // This makes a disabled control more readable
}

通常,如果没有为 WPF 控件显式设置不透明度,它会在启用控件时的 1.0 (100%) 和禁用控件时的 0.35 (35%) 之间切换。

一旦我使用扩展方法显式设置不透明度,此后当我设置 IsEnabled 没有扩展方法时,控件将停止在 1.0 和 0.35 之间切换。即使 IsEnabled 设置为 false,它也会“卡在”1.0 (100%);

设置不透明度后,我以后如何重置控件以在 1.0 和 0.35 之间切换正常的不透明度?

【问题讨论】:

  • 为什么不直接定义控件样式,并在控件禁用时使用触发器设置不透明度?
  • @Dennis:我不能使用样式/触发器,因为有时我需要在禁用时不透明度变亮(这样你就可以阅读它),有时我需要在禁用时变暗 - 我改变了按钮中的文本作为指示状态的一种方式。例如,我禁用按钮并说“等待作业完成...”,然后在作业完成后重新启用按钮。
  • 您仍然应该在 XAML 中使用样式执行此操作,但您的设计中缺少 ViewModel 部分。您绑定到某些属性 IsEnabled={BInding IsWaiting} 的位置,然后将触发器置于样式中以对禁用的更改做出反应或使用数据触发器进行 IsWaiting

标签: c# wpf opacity reset isenabled


【解决方案1】:

Opacity 的更改是通过触发器完成的。通过直接设置值,您将覆盖样式或触发器可能产生的任何值。这真的不是做这种事情的方法。您应该使用自己的样式和触发器。

但是,您可以通过清除分配给Opacity 的值来实现您想要的:

control.ClearValue(UIElement.OpacityProperty);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2014-09-05
    • 1970-01-01
    • 2011-05-26
    • 2016-05-15
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多