【问题标题】:wpf disabled opacity levelwpf 禁用不透明度级别
【发布时间】:2016-01-03 03:15:11
【问题描述】:

当它们被禁用时,我需要更改容器(网格/停靠面板/等)中控件的不透明度,以使它们看起来更亮或更暗。

当容器被禁用时,嵌套控件似乎降低到大约 0.5(比如说)不透明度。如果我在禁用时尝试调整容器的不透明度,无论我将其设置为什么,最大值始终限制为 0.5。分配不透明度的方法也无关紧要,我直接在代码和样式/触发器中尝试过。

我猜这是通过使用矩形(或其他窗口类型)遮罩并设置不透明度在容器中实现的。然后,from MSDN it says

不透明度从元素树向下的父元素应用到 子元素,但嵌套不透明度设置的可见效果 未在单个子元素的属性值中指示。 例如,如果一个列表具有 50% (0.5) 的不透明度和它的列表之一 items 有自己的不透明度设置为 20% (0.2),即净可见不透明度 因为该列表项将呈现为 10% (0.1),但 列表项 Opacity 属性的属性值仍为 0.2 查询时。

所以我明白为什么我会看到这种行为,我只是希望有一种方法可以覆盖它?

如果没有,我能想到的唯一选择是用我自己的矩形滚动我自己的禁用行为,然后我可以设置我需要的不透明度级别。对我来说这听起来像是不必要的麻烦,除非我错过了什么?

请注意,我是 interested in this question,但以这种方式从代码中设置不透明度并没有什么不同,禁用的控件似乎不受影响。

【问题讨论】:

  • 问得很好的问题:)
  • @vnikhil 真的吗?对我来说这有点冗长。只有来自 MSDN 的引用文本和更多解释就足够了。它不需要如此冗长和冗长。事实上,我只是通过阅读引用和查看问题标题来理解问题。
  • 另一方面,cmets 关于这个问题的冗长但实际上并没有解决它,这很好。现在我希望我有一个有用的答案。

标签: c# wpf wpf-controls opacity


【解决方案1】:

通常情况下,WPF 控件中的禁用状态是通过使用不同的背景和前景画笔呈现的,这些画笔是使用控件模板中的触发器设置的,而不是更改不透明度。例如。对于 TextBox,它有这个触发器:

<ControlTemplate.Triggers>
    <Trigger Property="IsEnabled" Value="false">
        <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
    </Trigger>
</ControlTemplate.Triggers>

不透明度不变。如果您有一个 IsEnabled="False" 的 GroupBox,那么所有子控件都将继承 IsEnabled 状态。

如果您想以某种方式更改禁用的外观,请创建自己的模板样式或修改默认样式。

【讨论】:

  • 感谢您的回复,但我并不是说控件本身的不透明度正在改变。相反,我相信它是通过一个覆盖窗口在内部实现的,该窗口“掩盖”了它下面的所有内容。因此,您可以减少容器内禁用控件的不透明度,但不能增加。此外,我不相信你是正确的,禁用的控件没有改变他们的背景和前景。如果是这样,尝试使用触发器或在代码中设置前景应该覆盖“禁用”值,但这不会发生并且这些值被忽略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2013-03-19
相关资源
最近更新 更多