我知道WPF画笔类有一个Opacity属性。我们需要使用系统定义的画笔,但不透明度的一半。我们想做这样的事情(这显然是假代码)......
<Border Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}, Opacity=0.5}" />
我们当然不能直接在系统定义的画笔上更改不透明度,因为这样会在所使用的任何地方搞乱。
我们要做的是以某种方式定义一个转换器,我们拿一个刷子并返回一个不透明度改变的副本,但由于这不是绑定,我们不要知道在哪里/如何应用转换器。另外,如果它是动态资源,我们需要确保它跟踪变化。
我们也不能直接在Border上设置不透明度,因为它的所有子元素也具有相同的不透明度。
我们当前的解决方法是将内容直接放在边框中,而不是将边框及其内容作为兄弟放在网格中,然后我们在边框上设置不透明度。由于内容现在位于顶部,而不是在边框内,因此不受不透明度的影响。这只是意味着我们在视觉树中添加了额外的东西,这很烦人,但确实有效。如果我们可以简单地在XAML中调整(副本)系统画笔的不透明度会好得多。
答案 0 :(得分:1)
有点晚了,但为了别人的缘故......
您可以使用新的不透明度创建衍生纯色画笔。为此,您只需从用作绑定源的原始画笔中借用颜色,然后设置新的不透明度。
<SolidColorBrush Color="{Binding Color, Source={StaticResource blue-light}}" Opacity="0.5" />
答案 1 :(得分:0)
也许您可以尝试根据系统颜色创建一个新画笔,而不是直接使用系统画笔,如下所示:
<Border>
<Border.Background>
<SolidColorBrush
Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}"
Opacity="0.5" />
</Border.Background>
</Border>
答案 2 :(得分:0)
嗯,我想我找到了!感谢我做过的其他工作,我想出了一个DynamicResourceBinding概念(StaticResourceBinding也是如此!),您可以使用转换器以您想要的任何方式转换画笔。
这是StackOverflow上该页面的链接,我在这里为动态和静态资源执行此操作...