我知道WPF画笔类具有不透明度属性。我们需要使用一个系统定义的画笔,但不透明度的一半。我们想做这样的事情(这显然是假代码).
<Border Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}, Opacity=0.5}" />当然,我们不能直接改变系统定义的画笔上的不透明度,因为无论在哪里使用它,都会搞砸。
我们想要做的是定义一个转换器,我们取一个画笔,并在不透明的情况下返回它的副本,但是由于这不是绑定,所以我们不知道在哪里/如何应用转换器。另外,如果它是一个动态资源,我们需要确保它跟踪更改。
我们也不能简单地在边界上直接设置不透明度,因为当时所有的儿童也有相同的减少不透明度。
我们目前的工作不是直接将内容放在边界上,而是将边界及其内容作为兄弟节点放在网格中,然后在边界上设置不透明度。因为内容现在是在顶部,而不是在边框内,所以它不受不透明度的影响。它只是意味着我们在视觉树中增加了额外的东西,这是很烦人的,但它确实有效。如果我们可以简单地调整XAML中( a)系统刷的不透明度,那就好多了。
发布于 2015-05-23 09:26:19
也许您可以尝试创建一个基于系统颜色的新画笔,而不是直接使用系统刷,如下所示:
<Border>
<Border.Background>
<SolidColorBrush
Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}"
Opacity="0.5" />
</Border.Background>
</Border>发布于 2017-05-12 23:01:07
有点晚了,但为了其他人.
你可以创造衍生固体色刷与新的不透明。为此,您只需从用作绑定源的原始画笔中借用颜色,然后设置一个新的不透明度。
<SolidColorBrush Color="{Binding Color, Source={StaticResource blue-light}}" Opacity="0.5" />发布于 2015-11-20 00:01:35
我想我找到了!由于我所做的其他工作,我想出了一个DynamicResourceBinding概念(StaticResourceBinding也是!)您可以使用转换器以任何您想要的方式转换画笔。
这里有一个指向StackOverflow页面的链接,在这里,我为动态和静态资源执行此操作..。
https://stackoverflow.com/questions/30410955
复制相似问题