【发布时间】: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