您可以将不透明度应用于系统定义的画笔吗?
Can you apply an opacity to a system-defined brush?
我知道 WPF 笔刷 class 具有不透明度 属性。我们需要使用系统定义的画笔,但不透明度减半。我们想做这样的事情(这显然是假代码)...
<Border Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}, Opacity=0.5}" />
我们当然不能直接更改系统定义画笔的不透明度,因为那样会在使用它的所有地方弄乱。
我们想要做的是以某种方式定义一个转换器,我们使用一个画笔和 returns 它的一个副本,改变了不透明度,但由于这不是绑定,我们不不知道 where/how 应用转换器。另外,如果它是动态资源,我们需要确保它跟踪更改。
我们也不能简单地直接在 Border 上设置不透明度,因为这样它的所有子项也具有相同的降低的不透明度。
我们目前的解决方法不是将内容直接放在边框中,而是将边框及其内容作为同级元素放在网格中,然后在边框上设置不透明度。由于内容现在位于边框之上,而不是边框内部,因此它不受不透明度的影响。这只是意味着我们在可视化树中添加了额外的东西,这很烦人,但它确实有效。如果我们可以在 XAML.
中简单地调整系统画笔(的副本)的不透明度,那就更好了
也许你可以尝试根据系统颜色创建一个新画笔,而不是直接使用系统画笔,像这样:
<Border>
<Border.Background>
<SolidColorBrush
Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}"
Opacity="0.5" />
</Border.Background>
</Border>
嗯,我想我找到了!感谢我所做的其他工作,我想出了一个 DynamicResourceBinding 概念(还有 StaticResourceBinding!),您可以使用转换器以任何您想要的方式转换画笔。
这是 Whosebug 上该页面的 link,我在其中对动态和静态资源执行此操作...
有点晚了,不过为了别人着想...
您可以创建具有新不透明度的衍生纯色画笔。为此,您只需从用作绑定源的原始画笔借用颜色,然后设置新的不透明度。
<SolidColorBrush Color="{Binding Color, Source={StaticResource blue-light}}" Opacity="0.5" />
我知道 WPF 笔刷 class 具有不透明度 属性。我们需要使用系统定义的画笔,但不透明度减半。我们想做这样的事情(这显然是假代码)...
<Border Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}, Opacity=0.5}" />
我们当然不能直接更改系统定义画笔的不透明度,因为那样会在使用它的所有地方弄乱。
我们想要做的是以某种方式定义一个转换器,我们使用一个画笔和 returns 它的一个副本,改变了不透明度,但由于这不是绑定,我们不不知道 where/how 应用转换器。另外,如果它是动态资源,我们需要确保它跟踪更改。
我们也不能简单地直接在 Border 上设置不透明度,因为这样它的所有子项也具有相同的降低的不透明度。
我们目前的解决方法不是将内容直接放在边框中,而是将边框及其内容作为同级元素放在网格中,然后在边框上设置不透明度。由于内容现在位于边框之上,而不是边框内部,因此它不受不透明度的影响。这只是意味着我们在可视化树中添加了额外的东西,这很烦人,但它确实有效。如果我们可以在 XAML.
中简单地调整系统画笔(的副本)的不透明度,那就更好了也许你可以尝试根据系统颜色创建一个新画笔,而不是直接使用系统画笔,像这样:
<Border>
<Border.Background>
<SolidColorBrush
Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}"
Opacity="0.5" />
</Border.Background>
</Border>
嗯,我想我找到了!感谢我所做的其他工作,我想出了一个 DynamicResourceBinding 概念(还有 StaticResourceBinding!),您可以使用转换器以任何您想要的方式转换画笔。
这是 Whosebug 上该页面的 link,我在其中对动态和静态资源执行此操作...
有点晚了,不过为了别人着想...
您可以创建具有新不透明度的衍生纯色画笔。为此,您只需从用作绑定源的原始画笔借用颜色,然后设置新的不透明度。
<SolidColorBrush Color="{Binding Color, Source={StaticResource blue-light}}" Opacity="0.5" />