SilverLight中的畫刷

SliverLight中的畫刷有以下幾種:
SolidColorBrush: 純色畫刷。主要屬性有:Color。
LinearGradientBrush: 線性漸變畫刷。主要屬性有:StartPoint, EndPoint, GradientStop, SpreadMethod。
RedialGradientBrush: 徑向漸變畫刷。主要屬性有:Center, RadiusX, RadiusY, GradientOrigin, GradientStop。
ImageBrush: 圖像畫刷。主要屬性有:ImageSource, Stretch, AlignmentX, AlignmentY。
VideoBrush: 視頻畫刷。主要屬性有:SourceName, Stretch, AlignmentX, AlignmentY。
1. SolidColorBrush.
純色畫刷比較簡單,就是設置一個顏色值給Color屬性。但這個顏色值可以設置成:
顏色字符串:如 Red,Blue等等。總共有256個命名的顏色串。
RGB值:如 #0099FF, #F1F1F1等等。這個跟網頁中指定的顏色一樣。
ARGB值:如#880099FF, 比RGB多了Alpha通道信息,用於指定透明度。
RGB還有一種方式就是如:#09F, #809F,這就是把每一位重複,這樣就得到#0099FF, #880099FF。
2. LinearGradientBrush.
先寫個最簡單的。
<Canvas 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Rectangle Width="80" Height="60">
        <Rectangle.Fill>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                <GradientStop Offset="0" Color="Blue" />
                <GradientStop Offset="1" Color="Red" />
            </LinearGradientBrush>
        </Rectangle.Fill>        
    </Rectangle>
</Canvas>
 
漸變的設計挺有意思的,StartPoint和EndPoint描述了一條線,左上角是0,0, 右下角是1,1,這條線是相對於對象的大小
的相對位置,也就是說,假定對象的寬度和高度都是1. 這樣,不管對象是什麼大小,都可以用同樣的值來描述。如果不設置
StartPoint和EndPoint,那麼就是從左上角到右下角的一條線。這條線就是漸變的基準線
然後每一個GradientStop中的Offset就是基於這條線上的相對位置,同樣,這條線也假定長度爲1. Offset就是0到1中間
的一個值,也就指定了基準線上位置。再指定一個Color, 就代表從上一個點到這個點的線性漸變顏色。
那麼,上面的設置就使得rectangle填充成從右上角的藍色到右下角的紅色漸變。
注意,實際上這些相對值,就是StartPoint,EndPoint, Offset都是可以設成小於0或大於1的值。
下來,再看幾個例子。
橫向漸變:就是把StartPoint和EndPoint設成: ( 0, 0 ) –> ( 1, 0 ), 也就是Y值不變,X值變。
縱向漸變:就是把StartPoint和EndPoint設成:( 0, 0 ) –> ( 0, 1 ), 也就是X值不變,Y值變。
多個顏色值漸變:就是多放幾個GradientStop。
<Canvas 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Rectangle Width="80" Height="60" Canvas.Left="0">
        <Rectangle.Fill>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                <GradientStop Offset="0" Color="Blue" />
                <GradientStop Offset="1" Color="Red" />
            </LinearGradientBrush>
        </Rectangle.Fill>        
    </Rectangle>

    <Rectangle Width="80" Height="60" Canvas.Left="90">
        <Rectangle.Fill>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Offset="0" Color="Blue" />
                <GradientStop Offset="1" Color="Red" />
            </LinearGradientBrush>
        </Rectangle.Fill>
    </Rectangle>

    <Rectangle Width="80" Height="60" Canvas.Top="70">
        <Rectangle.Fill>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Offset="0" Color="Red" />
                <GradientStop Offset="0.2" Color="Orange" />
                <GradientStop Offset="0.4" Color="Yellow" />
                <GradientStop Offset="0.6" Color="Green" />
                <GradientStop Offset="0.8" Color="Blue" />
                <GradientStop Offset="1" Color="Purple" />
            </LinearGradientBrush>
        </Rectangle.Fill>
    </Rectangle>

    <Rectangle Width="80" Height="60" Canvas.Top="70" Canvas.Left="90">
        <Rectangle.Fill>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                <GradientStop Offset="0" Color="Red" />
                <GradientStop Offset="0.4" Color="Blue" />
                <GradientStop Offset="0.4" Color="Yellow" />
                <GradientStop Offset="0.6" Color="Yellow" />
                <GradientStop Offset="0.6" Color="Green" />
                <GradientStop Offset="1" Color="Orange" />
            </LinearGradientBrush>
        </Rectangle.Fill>
    </Rectangle>

</Canvas>
 
第1個是橫向漸變,第2個是縱向漸變,第3個是多顏色漸變,第4個是帶有純色的多顏色漸變。
最後,還有一個屬性SpreadMethod, 顧名思義,這就是覆蓋方法。這是當漸變沒有填充完整個對象時,那麼剩下的部分用什麼
顏色來填充。可以設的值有:
Pad: 這是默認值。就是用最後一個顏色值來填充。
Repeat: 重複。就是再從第一個顏色往後開始畫漸變。
Reflect: 反射。就是從最後一個往前開始畫漸變。
<Canvas 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Rectangle Width="80" Height="60">
        <Rectangle.Fill>
            <LinearGradientBrush SpreadMethod="Repeat" StartPoint="0,0" EndPoint="0,0.5">
                <GradientStop Offset="0" Color="Red" />
                <GradientStop Offset="0.2" Color="Orange" />
                <GradientStop Offset="0.4" Color="Yellow" />
                <GradientStop Offset="0.6" Color="Green" /> 
            </LinearGradientBrush>
        </Rectangle.Fill>
    </Rectangle>

    <Rectangle Width="80" Height="60" Canvas.Left="90">
        <Rectangle.Fill>
            <LinearGradientBrush SpreadMethod="Reflect" StartPoint="0,0" EndPoint="0,0.5">
                <GradientStop Offset="0" Color="Red" />
                <GradientStop Offset="0.2" Color="Orange" />
                <GradientStop Offset="0.4" Color="Yellow" />
                <GradientStop Offset="0.6" Color="Green" />
            </LinearGradientBrush>
        </Rectangle.Fill>
    </Rectangle>

</Canvas>
 
3. RedialGradientBrush.
線性漸變定義了一條基準線,而徑向漸變使用Center(圓心), RadiusX(x軸半徑), RadiusY(y軸半徑),這三個屬性定義
了一個橢圓,GradientStop中的顏色就是從圓心到四周以橢圓漸變填充。如下面例子:
<Canvas 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Ellipse Width="80" Height="60">
        <Ellipse.Fill>
            <RadialGradientBrush>
                <GradientStop Offset="0" Color="Blue" />
                <GradientStop Offset="1" Color="Red" />
            </RadialGradientBrush>
        </Ellipse.Fill>
    </Ellipse>

</Canvas>
 
這裏沒有Center, RadiusX, RadiusY, 默認這三個值分別是(0.5,0.5),(0.5),(0.5)。就是以中心點向四周漸變。
再看下面的例子, 把基準圓設成一個橢圓。
<Canvas 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Ellipse Width="80" Height="60">
        <Ellipse.Fill>
            <RadialGradientBrush Center="0.5,0.5" RadiusX="0.5" RadiusY="0.25">
                <GradientStop Offset="0" Color="Blue" />
                <GradientStop Offset="1" Color="Red" />
            </RadialGradientBrush>
        </Ellipse.Fill>
    </Ellipse>

</Canvas>
 
還有一個屬性,GradientOrigin,用來設置漸變色從那裏開始的。
<Canvas 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Ellipse Width="80" Height="80">
        <Ellipse.Fill>
            <RadialGradientBrush Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5" GradientOrigin="0,0">
                <GradientStop Offset="0" Color="White" />
                <GradientStop Offset="1" Color="Blue" />
            </RadialGradientBrush>
        </Ellipse.Fill>
    </Ellipse>

    <Ellipse Width="80" Height="80" Canvas.Left="90">
        <Ellipse.Fill>
            <RadialGradientBrush Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5" GradientOrigin="1,0">
                <GradientStop Offset="0" Color="White" />
                <GradientStop Offset="1" Color="Blue" />
            </RadialGradientBrush>
        </Ellipse.Fill>
    </Ellipse>

    <Ellipse Width="80" Height="80" Canvas.Top="90">
        <Ellipse.Fill>
            <RadialGradientBrush Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5" GradientOrigin="0,1">
                <GradientStop Offset="0" Color="White" />
                <GradientStop Offset="1" Color="Blue" />
            </RadialGradientBrush>
        </Ellipse.Fill>
    </Ellipse>

    <Ellipse Width="80" Height="80" Canvas.Top="90" Canvas.Left="90">
        <Ellipse.Fill>
            <RadialGradientBrush Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5" GradientOrigin="1,1">
                <GradientStop Offset="0" Color="White" />
                <GradientStop Offset="1" Color="Blue" />
            </RadialGradientBrush>
        </Ellipse.Fill>
    </Ellipse>
    
</Canvas>
 
最後,RadialGradientBrush也有 SpreadMethod 屬性,用法跟LinearGradientBrush一樣。
4. ImageBrush.
ImageBrush的Stretch屬性,與<Image>中的Stretch一樣,這裏就不說了。
<Canvas 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Ellipse Width="80" Height="80">
        <Ellipse.Fill>
            <ImageBrush ImageSource="Penguins_Small.jpg" />
        </Ellipse.Fill>
    </Ellipse>    
</Canvas>
 
另外,如果圖像小於填充區域的話,還可以設置AlignmentX(可設爲:Left, Center, Right)和AlignmentY( Top, 
Center, Bottom)屬性來實現對齊方式。
5. VideoBrush.
<Canvas 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <MediaElement x:Name="myVideo" AutoPlay="True" Source="test.wmv" Volume="4" Opacity="0"/>
    <Ellipse Width="80" Height="80">
        <Ellipse.Fill>
            <VideoBrush SourceName="myVideo" Stretch="Fill"/>
        </Ellipse.Fill>
    </Ellipse>    
</Canvas>
videobrush
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章