WPF Glass Brush 标记扩展






4.67/5 (3投票s)
一个具有“玻璃”外观的 WPF XAML 标记扩展
引言
这是一个创建“玻璃”画笔的 XAML 标记项目演示。当然,这里有一个示例截图!

背景
我想要一种快速的方法,通过选择一种颜色来创建“玻璃”风格的按钮,它就是这样。
Using the Code
使用代码非常简单。您需要在项目中(或库中)使用 HSL.vb, ColorExtension.vb 和 GlassBrushExtension.vb 文件。首先将项目(或库)的命名空间添加到您的 Window 标签。演示使用以下标签
xmlns:a="clr-namespace:GlassButton"
接下来,只需在任何画笔属性上使用标记扩展即可,例如以下示例
<Border VerticalAlignment="Bottom" Width="30" Height="70"
Background="{a:GlassBrush #24292b, Horizontal=False, Glow=30}" />
或
<Border VerticalAlignment="Bottom" Width="30" Height="70"
Background="{a:GlassBrush {StaticResource BaseColor},
Horizontal=False, Glow=30}" />
从某些时候开始,嵌套标记扩展似乎存在一些问题。我找到了一篇关于此的文章,可以在这里找到。如果您遇到此问题,可以使用以下属性元素语法来解决
<Border VerticalAlignment="Bottom" Width="30" Height="70">
<Border.Background>
<a:GlassBrush Color="{StaticResource BaseColor}" Horizontal="False" Glow="30"/>
</Border.Background>
</Border>
关注点
除了只需要选择一种颜色来获取画笔之外,您还可以添加发光或反转按钮。我包含了一个被修改过的按钮模板作为按钮的示例。
关于代码的一些信息
扩展程序只是一个继承自 MarkupExtension
的类,位于 System.Windows.Markup
命名空间中。在它的核心,一个扩展需要你定义 ProvideValue
函数,在这种情况下,它会产生一个正常的或反向的画笔。为了增加灵活性,我创建了一些可以在 XAML 中定义的属性:Color
、Horizontal
、Glow
、IsReversed
。 嵌套标记扩展存在一个小问题。 为了解决这个问题,我提供了一个采用颜色的 Sub New
。这允许您使用命名颜色。所以,虽然以下应该可以工作,但它在 Visual Studio 2008 中对我不适用:
<Border VerticalAlignment="Bottom" Width="30" Height="70"
Background="{a:GlassBrush Color={StaticResource BaseColor},
Horizontal=False, Glow=30}" />
另外,为了使画笔从单一颜色开始工作,我将值转换为 HSL,并主要调整基本颜色的饱和度和亮度。通过减少饱和度并增加亮度,我创建了顶部的“发光”效果,这种效果更亮,有点“洗白”的效果。 在底部,我慢慢地从基本颜色淡化到饱和度增加的颜色。 如果您选择添加发光,它通过增加较强颜色的亮度来实现。 所以它有点像蓝色比蓝色更蓝的例子。
我没有遇到任何问题的事情是在画笔中获得固定大小的区域。 画笔只是缩放到您用它绘制的任何内容。 所以,虽然我更喜欢固定大小的“高亮”区域,但结果看起来还不错。 随着水平画笔变得更高或垂直画笔变得更宽,您会看到“圆度”逐渐消失。
希望您喜欢它。
历史
- 初始发布 2009-06-16