65.9K
CodeProject 正在变化。 阅读更多。
Home

WPF Glass Brush 标记扩展

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (3投票s)

2009 年 6 月 18 日

CPOL

2分钟阅读

viewsIcon

27563

downloadIcon

731

一个具有“玻璃”外观的 WPF XAML 标记扩展

引言

这是一个创建“玻璃”画笔的 XAML 标记项目演示。当然,这里有一个示例截图!

GlassButton

背景

我想要一种快速的方法,通过选择一种颜色来创建“玻璃”风格的按钮,它就是这样。

Using the Code

使用代码非常简单。您需要在项目中(或库中)使用 HSL.vb, ColorExtension.vbGlassBrushExtension.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 中定义的属性:ColorHorizontalGlowIsReversed。 嵌套标记扩展存在一个小问题。 为了解决这个问题,我提供了一个采用颜色的 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
© . All rights reserved.