1. 程式人生 > >WPF學習(12)-形狀、畫刷和變換

WPF學習(12)-形狀、畫刷和變換

       我個人從winform轉wpf最主要的原因就是winform的圖形太費勁了,比如自定義一個圖片,在頁面上動來動去,然後滑鼠移上去的時候,顯示具體資訊,比如有報警的時候,這個圖片周圍描紅,這個用winform的畫圖技術真的是把我搞的夠嗆,但是wpf就非常輕鬆就可以搞定了,在11這個筆記的那個行為,拖動和縮放的示例,就非常簡單的實現了,當然用到了變換的一些知識。

       形狀,基本上就是我們日常生活中看到的,比如線條,矩形,橢圓,折線,多邊形。只要知道這些 形狀的構成要素,就可以自由的顯示形狀了,以下程式碼,就寫了一些形狀,當然,可能不全面。

       

	<Grid>
		<Grid.Background>
			<ImageBrush Stretch="Uniform" ImageSource="Images\Alarm.png"></ImageBrush>
		</Grid.Background>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
			<ColumnDefinition></ColumnDefinition>
			<ColumnDefinition></ColumnDefinition>
			<ColumnDefinition></ColumnDefinition>
		</Grid.ColumnDefinitions>
		<Ellipse Grid.Row="0" Grid.Column="0" Fill="yellow" HorizontalAlignment="center" Height="80" Stretch="Fill"  Stroke="Black" VerticalAlignment="center" Width="160"/>
		<Rectangle Grid.Row="0" Grid.Column="1" Fill="red" HorizontalAlignment="center" Height="80" Stretch="Fill"  Stroke="Black" VerticalAlignment="center" Width="160"/>
	    <Line  Stroke="blue" Grid.Row="0" Grid.Column="2" X1="10" Y1="20" X2="120" Y2="20"></Line>
	    <Polyline Grid.Row="1" Grid.Column="0" Points="0,0 10,10 20,20 15,10 25,19 16,39" Stroke="Black"></Polyline>
	<Polygon Grid.Row="1" Grid.Column="1" Points="0,0 10,10 20,20 15,10 25,19 16,39" Fill="Purple" Stroke="Red"></Polygon>
	<Polygon Grid.Row="1" Grid.Column="2" Stroke="Firebrick" StrokeThickness="1" Fill="Brown" Points="15,200 68,70 110,200 0,125 135,125" FillRule="Nonzero"></Polygon>
	<Polyline StrokeDashArray="1 2" Grid.Row="2" Grid.Column="0" StrokeThickness="20"  Points="10,30 60,0 90,40 120,10 350,10"></Polyline>
	<Ellipse Grid.Row="2" Grid.Column="1" Stroke="Black" StrokeThickness="1" Width="100" Height="100">
		<Ellipse.Fill>
			<RadialGradientBrush RadiusX="1" RadiusY="1" GradientOrigin="0.7,0.3">
				<GradientStop Color="Red" Offset="0"></GradientStop>
				<GradientStop Color="Green" Offset="1"></GradientStop>
			</RadialGradientBrush>
		</Ellipse.Fill>
	</Ellipse>
	<Rectangle Grid.Row="2" Grid.Column="2" Height="10" Width="10" Stroke="Black" Fill="Blue">
		<Rectangle.RenderTransform>
			<RotateTransform Angle="25"></RotateTransform>
		</Rectangle.RenderTransform>
	</Rectangle>
	</Grid>

      具體的效果就是下面這張圖形。

 

       有了基本的形狀,就需要對形狀進行美化或者靈活地展現,上面這個例子已經用到了一些,不過不外乎形狀邊緣樣式,內部填充,蒲城效果(相對於控制元件),透明度等等,這些遇到具體需求再回來看吧,但是都不是什麼有難度的東西,但是有一個東西很有用,就是變換。

         變換為什麼有用呢?因為對於很多使用WPF來構建程式的專案來說,圖形介面的拖拉拽幾乎都是標配,如果我們自定義了一個控制元件,裡面包含複雜的構成,包含很多形狀,要實現用滑鼠拖拉拽改變形狀的需求,那麼就需要使用變換,當然可以封裝成依賴屬性或者行為,但是基礎還是使用變換。

          實現以下簡單需求,點選按鈕,矩形不斷旋轉。

         

    <Grid>
        <DockPanel LastChildFill="True">
            <Button Click="Button_Click">123</Button>
            <Grid>
                <Rectangle Name="rc" HorizontalAlignment="Center" Height="100" Width="100"  Stroke="Red"  ></Rectangle>
            </Grid>
        </DockPanel>
    </Grid>

       後臺程式碼如下

RotateTransform rt = new RotateTransform();
rt.Angle++;
rc.RenderTransform = rt;

       畫刷就是幾種,比如solidbrush,LinearGradientBrush,ImageBrush 等,這幾個是最長使用到的,可以配置透明度呀等等屬性來使我們的介面變得好看,下面就是一個漸變效果的畫刷的應用。

      

    <Grid>
        <DockPanel LastChildFill="True">
            <Button Click="Button_Click">123</Button>
            <Grid>
                <Grid.Background>
                    <LinearGradientBrush>
                        <GradientStop Color="White" Offset="0"></GradientStop>
                        <GradientStop Color="LightBlue" Offset="0.2"></GradientStop>
                        <GradientStop Color="Blue" Offset="0.6"></GradientStop>
                        <GradientStop Color="DarkBlue" Offset="1"></GradientStop>
                    </LinearGradientBrush>
                </Grid.Background>
                <Rectangle Name="rc" HorizontalAlignment="Center" Height="100" Width="100"  Stroke="Red"  ></Rectangle>
            </Grid>
        </DockPanel>
    </Grid>

     效果如下,感覺比普通的solidcolorbrush好看一些了。