5. 画笔

本节演示了如何使用XAML的画笔绘制背景和前景。本节将学习如何使用纯色和线性渐变的笔刷,使用笔刷绘制图像,使用新的AcrylicBrush和RevealBrush。

1. SolidColorBrush

下图中的按钮使用了SolidColorBrush,顾名思义,这只画笔使用纯色。全部区域用同一种颜色绘制。

把Backgroud特性设置为定义纯色的字符串,就可以定义纯色。使用BrushValueSerializer把该字符串转换为一个SolidColorBrush元素。

        <Button Content="Solid Color" Background="#FFC9659C"/>

当然,通过设置Background子元素并把SolidColorBrush元素添加为它的内容,也可以得到同样的效果。示例按钮使用十六进制值用作纯背景色:

            <Button Content="Solkid Color 2">
                <Button.Background>
                    <SolidColorBrush Color="#FFC9659C"/>
                </Button.Background>
            </Button>

2. LinearGradientBrush

对于平滑的颜色变换,可以使用LinearGradientBrush,如下图所示。这个画笔定义了StartPoint和EndPoint属性。使用这些属性可以为线性渐变指定2D坐标。默认的渐变方向是从(0,0)到(1,1)的对角线。定义其他值可以给渐变指定不同的方向。例如,StartPoint指定为(0,0),EndPoint指定为(0,1),就得到了一个垂直渐变。StartPoint或EndPoint值指定为(1,0),就得到一个水平渐变。

通过该画笔的内容,可以用GradientStop元素定义指定偏移位置的颜色值。在各个偏移位置之间,颜色是平滑过渡的。

            <Button Content="Linear Gradient Brush">
                <Button.Background>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                        <GradientStop Offset="0" Color="LightBlue"/>
                        <GradientStop Offset="0.4" Color="Pink"/>
                        <GradientStop Offset="1" Color="Yellow"/>
                    </LinearGradientBrush>
                </Button.Background>
            </Button>

3. ImageBrush

要把图像加载到画笔中,可以使用ImageBrush元素。通过这个元素,显示ImageSource属性定义的图像。图像可以在文件系统中访问,或从程序集的资源中访问。在代码示例中,添加文件系统中的图像:

            <Button Content="Image Brush" FontWeight="ExtraBold" FontSize="28" 
                    RenderTransformOrigin="0.5,0.5">
                <Button.Background>
                    <ImageBrush ImageSource="msbuild.png" Opacity="0.5"/>
                </Button.Background>
            </Button>

运行应用程序时,尅看到如下图所示的按钮。

5. AcrylicBrush

Windows 10构建版本16299的一个新画笔是AcrylicBrush。这种画笔是新Fluent Desing的一部分。AcrylicBrush提供了透明效果,让应用或主机的其他元素通过该画笔显示出来。

发布为Windows 10一部分的一个应用程序是Calculator。这个计算器有一些透明度,可以让其他应用程序或壁纸图像在应用程序中显示出来(参见下图)。这种效果并不适用于计算器中额主数字按钮,但是计算器的其他元素可以让背景光线透出来。

示例中,给按钮的Background属性分配了AcrylicBrush。TintOpacity的值取自Slider的值。这样,移动应用程序中的Slider时,就可以根据不透明度来查看画笔的不同效果。TintColor属性指定笔刷的主色。

使用BackgroundSource属性,可以在HostBackdrop或Backdrop之间进行选择。使用Backdrop时,应用程序本身的颜色就会透出来。这就是所谓的in-app acrylic。控件中使用该画笔覆盖的元素会显示出来。而使用HostBackdrop时,会选取应用程序下面的颜色,这就是background acrylic。由于acrylic的UI效果需要GPU的功能,因此这一功能会额外消耗电池电量。当系统的电量较低时,AcrylicBrush使用由FallbackColor属性定义的纯色。还可以配置属性AlwaysUseFallback以始终使用FallbackColor。用户配置可以触发此设置,以提高电池使用时间:

            <Slider x:Name="slider" Minimum="0" Maximum="1" StepFrequency="0.1"/>
            <Button Content="Acrylic Brush Host Backdrop" HorizontalAlignment="Center"
                    Margin="-200,0,0,0">
                <Button.Background>
                    <AcrylicBrush BackgroundSource="HostBackdrop" TintColor="#FFFF0000"
                                  TintOpacity="{x:Bind slider.Value,Mode=OneWay}"
                                  FallbackColor="SkyBlue"/>
                </Button.Background>
            </Button>
        <Rectangle Height="100" Width="300" Fill="DarkBlue" Grid.Row="1"/>
        <Button Content="Acrylic Brush Backdrop" Grid.Row="1" HorizontalAlignment="Center"
                Margin="-200,0,0,0">
            <Button.Background>
                <AcrylicBrush BackgroundSource="Backdrop" TintColor="#FFFF0000"
                              TintOpacity="{x:Bind slider.Value,Mode=OneWay}"
                              FallbackColor="SkyBlue"/>
            </Button.Background>
        </Button>

下图显示了当前的TintOpacity设置为0.2的AcrylicBrush。顶部的按钮用HostBackdrop配置。这里可以看到应用程序下面的背景透出来。底部的按钮用Backdrop配置。这里可以看到按钮下面的蓝色矩形透出来。

注意:

何时使用acrylic画笔?acrylic给应用程序增加了纹理和深度。应用程序内的导航和命令在acrylic背景下看起来令人印象深刻。然而,应用程序的主要内容应该使用纯粹的背景。

5. RevealBrush

Windows 10 构建版 16299 的另一个新画笔是RevealBrush。这个画笔突出显示用户使用灯光效果移动鼠标的区域。使用此画笔样式化按钮的一种简单方法是使用ButtonRevealStyle,如下面的代码片段所示:

        <Button Content="Button with Reveal Brush" Style="{ThemeResource ButtonRevealStyle}"
                Padding="12" Margin="12"/>

使用ButtonRevealStyle时,需要仔细观察应用程序在运行时的效果。下面的按钮定义了一个较厚的边框,该边框使用主题资源SystemControlHighlightAccentRevealBorderBrush中定义的BorderBrush,以帮助更清楚地看到效果。在按钮周围移动鼠标时,按钮的边框会突出显示出来。

        <Button Margin="4" BorderThickness="8" BorderBrush="{ThemeResource SystemControlHighlightAccentRevealBorderBrush}"
                Background="{ThemeResource SystemControlHighlightAccentRevealBackgroundBrush}"
                Content="With Reveal Border"/>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值