【发布时间】:2015-08-05 07:37:58
【问题描述】:
我知道 WPF 画笔类有一个 Opacity 属性。我们需要使用系统定义的画笔,但不透明度只有一半。我们想做这样的事情(这显然是假代码)......
<Border Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}, Opacity=0.5}" />
我们当然不能直接更改系统定义画笔的不透明度,因为那样会在使用它的任何地方搞砸。
我们想要做的是以某种方式定义一个转换器,我们使用一个画笔并返回它的副本并更改不透明度,但由于这不是绑定,我们不知道在哪里/如何应用转换器。另外,如果它是动态资源,我们需要确保它跟踪更改。
我们也不能简单地直接在边框上设置不透明度,因为它的所有子项也具有相同的降低不透明度。
我们当前的解决方法不是将内容直接放在边框中,而是将边框及其内容作为兄弟姐妹放在网格中,然后在边框上设置不透明度。由于内容现在位于边框顶部而不是边框内,因此不受不透明度的影响。这只是意味着我们在可视化树中添加了额外的东西,这很烦人,但它确实有效。如果我们可以直接在 XAML 中调整(副本)系统画笔的不透明度会更好。
【问题讨论】:
标签: wpf xaml opacity converters