Silverlight 4中的笔刷

介绍Silverlight 3、Silverlight 4 中的笔刷,及其使用方法和条件。

Silverlight中的的笔刷主要有SolidColorBrush、LinearGradientBrush、RadialGradientBrush、ImageBrush、VideoBrush、HtmlBrush。其中除HtmlBrush是Silverlight 4中新增的,其它都是Silverlight 3中就已经拥有的。

这里就以Visual Studio 2010为环境复习下Silverlight中旧的笔刷和4.0中新加的笔刷。

先放下综合实例的运行效果图:

Silvrelight 笔刷示例(浏览器中运行).jpg

Silvrelight 笔刷示例(浏览器中运行)

Silvrelight 笔刷示例(浏览器外运行).jpg

Silvrelight 笔刷示例(浏览器外运行)

SolidColorBrush(单色笔刷)

即只有一种颜色,这种笔刷的使用方法最简单,如下面的XAML:

<Ellipse Margin="20" x:Name="ellipse1" Stroke="Black" StrokeThickness="1"  ToolTipService.ToolTip="单色笔刷">
    <Ellipse.Fill>
        <SolidColorBrush Color="Red"></SolidColorBrush>
    </Ellipse.Fill>
</Ellipse>

效果如上面图中的红色椭圆。

LinearGradientBrush(线性渐变)

即在一直线上的渐变效果,可以通过StartPoint和EndPoint设置渐变方向((0,0)为左上角,(1,1)为右下角)。还可以通过添加GradientStop子节点来设置过渡颜色。效如上图左下区域。XAML如下:

 

<Border Margin="20" Grid.Row="2" BorderBrush="Black" BorderThickness="1" ToolTipService.ToolTip="渐变笔刷">
    <Border.Background>
        <LinearGradientBrush>
            <GradientStop Color="#FFFD0707"/>
            <GradientStop Color="#FF040404" Offset="1"/>
            <GradientStop Color="#FF1E4BB1" Offset="0.5"/>
        </LinearGradientBrush>
    </Border.Background>
</Border>

RadialGradientBrush(径向渐变)

 

说简单点就是放射状的渐变吧,和线性渐变的区别不是告别大。上面的示例XAML代码如下:

 

<controls:Calendar Margin="20" Grid.Column="1" Grid.Row="2" ToolTipService.ToolTip="渐变笔刷">
    <controls:Calendar.Background>
        <RadialGradientBrush>
            <GradientStop Color="#FF0D8933"/>
            <GradientStop Color="#FF4E4ECA" Offset="0.5"/>
            <GradientStop Color="#FFA094B5" Offset="1"/>
        </RadialGradientBrush>
    </controls:Calendar.Background>
</controls:Calendar>

ImageBrush(图片笔刷)

 

示例中就是以一个图片笔刷作为Rectangle的Fill属性。XAML代码 如下:

 

<Rectangle Stroke="Black" StrokeThickness="1" Margin="20" Grid.Column="1" ToolTipService.ToolTip="图片笔刷" >
    <Rectangle.Fill>
        <ImageBrush ImageSource="Content/IMG_5607.jpg"/>
    </Rectangle.Fill>
</Rectangle>

VideoBrush(视频笔刷)

 

视频笔刷必须借助MediaElement,其SourceName应该是一个MediaElement的Name。示例中,我放了一个MediaElement在资源中:

 

<UserControl.Resources>
    <MediaElement x:Name="reVideo" AutoPlay="True" Source="Content/qfc.wmv" IsMuted="True" />
</UserControl.Resources>

 

下面就是把示例中的代码放出来:

 

<Ellipse Grid.Row="1" Margin="20" x:Name="ellipse2" Stroke="Black" StrokeThickness="1">
    <Ellipse.Fill>
        <VideoBrush SourceName="reVideo"/>
    </Ellipse.Fill>
</Ellipse>

 

注意:刚接触SL的人可能会出现不显示视频的问题,那么请检查下MediaElement 是否正在播放或者并请AutoPlay设置为True,还有一种可能就是视频的编码问题,用Expression Encoder处理下就应该没问题了。

HtmlBrush(网页笔刷)

顾名思义就是以网页作为笔刷。他的使用和视频笔刷类似,需要一个承载网页的东西——WebBrowser,XAML如下:

 

<WebBrowser ToolTipService.ToolTip="WebBrowser"  x:Name="reBrowser" Source="http://www.code84.com/u/matrixdom/Blog.aspx/t-254" AllowDrop="True" Grid.Column="2" Margin="0" Grid.Row="1"></WebBrowser>

  下面就是HTMLBrush作为笔刷的心形路径:

 

<Path Stretch="Fill" Stroke="Black" Margin="10.833,24.08,11.167,10.5" UseLayoutRounding="True" Grid.Column="1" Grid.Row="1" Data="M200,256 C200,256 255.33333,230.66667 255.33333,191 C255.33333,151.33333 200,139.66667 200,200 C200.00017,137.33376 144.33333,152.33371 144.33301,192.00023 C144.66667,240.00011 200,256 200,256 z"  MouseLeftButtonDown="Path_MouseLeftButtonDown" ToolTipService.ToolTip="HTML笔刷">
    <Path.Fill>
        <HtmlBrush x:Name="hbFill" SourceName="reBrowser" ></HtmlBrush>
    </Path.Fill>
</Path>

 

要注意的是:WebBrowser 只能在浏览器外运行;HtmlBrush 不会自动重绘,所以默认情况下WebBrowse里的内容更新了HtmlBrush不会跟着变化,要作一点小小的处理,我的方法如下:

 

CompositionTarget.Rendering += (ctrSender, ctre) =>
    {
        if (App.Current.IsRunningOutOfBrowser)
            hbFill.Redraw();
    };

 

 

 

了,基本使用方法和要注意的情况就这些。想了解更详细点,可以下载附件中的工程源码。

附件:SLBrush.rar

posted @ 2009-12-20 09:30  齐.net  阅读(652)  评论(0编辑  收藏  举报