1. 程式人生 > >WPF中繪畫和動畫(3)

WPF中繪畫和動畫(3)

1. 矩形

矩形由筆觸(Stroke,即邊線)和填充(Fill)構成。Stroke屬性的設置於Line一樣,Fill屬性的資料型別是Brush。Brush是個抽象類,所以我們不可能拿一個Brush類的例項為Fill屬性賦值而只能用Brush派生類的例項進行賦值。

WPF的繪畫系統包含非常豐富的Brush型別,常用的有:

(1)      SolidColorBrush:實心畫刷。在XAML中可以使用顏色名稱字串(如Red、Blu)直接賦值。

(2)      LinearGradientBrush:線性漸變畫刷。色彩豔設定的直線方向、按設定的變化點進行漸變。

(3)      RadialGradientBrush:徑向漸變畫刷。色彩沿半徑的方向、按設定的變化點進行漸變,形成圓形填充。

(4)      ImageBrush:使用圖片(Image)作為填充內容。

(5)      DrawingBrush:使用向量圖(Vector)和點陣圖(Bitmap)作為填充內容。

(6)      VisualBrush:WPF中的每個控制元件都是由FrameworkElement類派生來的,而FrameworkElement又是由Visual類派生來的。Visual意為“可視”之意,每個控制元件的視覺化形象就可以通過Visual類的方法獲得。獲得這個視覺化的形象後,我們可以用這個形象進行填充,這就是VisualBrush。比如當我想把窗體上的某個控制元件拽到另一個位置,當滑鼠鬆開之前需要在滑鼠只指標下顯現一個控制元件的“幻影”,這個“幻影”就是用VisualBrush填充出來的一個矩形,並讓矩形捕捉滑鼠的位置、隨滑鼠移動。

下面是用各種畫刷填充矩形的綜合例項:

<Window x:Class="WpfApplication1.Window1"

 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

 Title="Rectangle and Brush" Height="390" Width="600">

    <Grid Margin="10">

        <Grid.RowDefinitions>

            <RowDefinition Height="160"/>

           <RowDefinition Height=" 10"/>

            <RowDefinition Height="160"/>

        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="180"/>

            <ColumnDefinition Width="10"/>

            <ColumnDefinition Width="180"/>

            <ColumnDefinition Width="10"/>

            <ColumnDefinition Width="180"/>

        </Grid.ColumnDefinitions>

        <!--實心填充-->

        <Rectangle Grid.Column="0" Grid.Row="0" Stroke="Black" Fill="LightBlue"/>

        <!--線性漸變-->

        <Rectangle Grid.Column="2" Grid.Row="0">

            <Rectangle.Fill>

                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">

                    <GradientStop Color="#ffb6f8f1" Offset="0"/>

                    <GradientStop Color="#ff0082bd" Offset="0.25"/>

                    <GradientStop Color="#ff95deff" Offset="0.6"/>

                    <GradientStop Color="#ff004f72" Offset="1"/>                   

                </LinearGradientBrush>

            </Rectangle.Fill>

        </Rectangle>

       <!--徑向漸變-->

        <Rectangle Grid.Column="4" Grid.Row="0">

            <Rectangle.Fill>

                <RadialGradientBrush>

                    <GradientStop Color="#ffb6f8f1" Offset="0"/>

                    <GradientStop Color="#ff0082bd" Offset="0.25"/>

                    <GradientStop Color="#ff95deff" Offset="0.75"/>

                    <GradientStop Color="#ff004f72" Offset="1.5"/>                   

                </RadialGradientBrush>

            </Rectangle.Fill>

        </Rectangle>

        <!--圖片填充-->

        <Rectangle Grid.Column="0" Grid.Row="2">

            <Rectangle.Fill>

                <ImageBrush ImageSource=".\Images\logo.bmp" Viewport="0,0,0.3,0.15" TileMode="Tile"/>

            </Rectangle.Fill>

        </Rectangle>

        <!--向量圖填充-->

        <Rectangle Grid.Column="2" Grid.Row="2">

            <Rectangle.Fill>

                <DrawingBrush Viewport="0,0,0.2,0.2" TileMode="Tile">

                    <DrawingBrush.Drawing>

                        <GeometryDrawing Brush="LightBlue">

                            <GeometryDrawing.Geometry>

                                <EllipseGeometry RadiusX="10" RadiusY="10"/>

                            </GeometryDrawing.Geometry>

                        </GeometryDrawing>

                    </DrawingBrush.Drawing>

                </DrawingBrush>

            </Rectangle.Fill>

        </Rectangle>

        <!—無填充,用線性漸變填充邊線-->

        <Rectangle Grid.Column="4" Grid.Row="2" StrokeThickness="10">

            <Rectangle.Stroke>

                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">

                    <GradientStop Color="White" Offset="0.3"/>

                    <GradientStop Color="Black" Offset="1"/>

                </LinearGradientBrush>

            </Rectangle.Stroke>

        </Rectangle>

    </Grid>

</Window>

實際效果如圖2所示: