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好看一些了。