c# wpf如何使用Blend工具繪制Control樣式
本文通過(guò)設(shè)計(jì)一個(gè)RadioButton,分享下使用Blend繪制Path的方法。待繪制的RadioButton樣式如下文所示,如有更好的方法實(shí)現(xiàn)該樣式,歡迎交流。
實(shí)現(xiàn)效果
將要實(shí)現(xiàn)的RadioButton樣式如下圖,可以看出按鈕的筆尖和筆身的填充色,以及選中時(shí)右上方圓形的填充色一致,代表筆的顏色。
實(shí)現(xiàn)方式
筆身使用矩形,填充色綁定按鈕背景色;筆頭部分使用閉合的Path,其中筆尖的顏色同樣綁定按鈕背景色;右上方的圓形使用Ellipse,填充色同樣綁定按鈕背景色。
實(shí)現(xiàn)步驟
1.打開Blend,新建一個(gè)WPF項(xiàng)目;
2.選中MainWindow的Grid,點(diǎn)擊資產(chǎn)按鈕,找到RadioButton并選中,在Grid中拖動(dòng)添加按鈕,如下圖所示:
3.找到屬性中的Width/Height屬性,修改為合適的值;點(diǎn)擊縮放按鈕,彈出的列表框中選中"適合選定內(nèi)容",以方便編輯;
4.選中該RadioButton,右鍵選擇編輯模板-編輯副本,彈出的對(duì)話框使用合適的方式創(chuàng)建資源(本文采用默認(rèn)),設(shè)置完后點(diǎn)擊確定;
5.刪除templateRoot中的所有內(nèi)容,只保留根Grid;此時(shí)會(huì)報(bào)錯(cuò),先將xaml中的所有Trigger注釋掉即可;
6.點(diǎn)擊矩形按鈕,拖動(dòng)添加矩形;屬性框中調(diào)整相關(guān)屬性,如下圖所示:
7.右鍵矩形按鈕,選擇線,添加一條直線,調(diào)整其屬性,如下圖:
8.選中筆按鈕,第一點(diǎn)添加在矩形左上角,第二點(diǎn)長(zhǎng)按添加在直線左端點(diǎn),長(zhǎng)按拖動(dòng)鼠標(biāo)可調(diào)整曲線形狀;同樣的方法添加右側(cè)的Path,如下圖所示:
9.點(diǎn)擊路徑選擇按鈕,使用鍵盤方向鍵及鼠標(biāo)對(duì)Path上的點(diǎn)進(jìn)行微調(diào),如下圖;
選中直線及兩條曲線,右鍵路徑,生成復(fù)合路徑,連接兩點(diǎn)使Path閉合;
選擇pen按鈕,添加筆尖曲線,如下圖:
12.右鍵矩形按鈕,選擇橢圓形,在右上角添加一個(gè)橢圓,調(diào)整其屬性,使Width=Height;
13.為矩形、圓形、筆尖Path設(shè)置填充色,即Fill屬性,右鍵Fill屬性右側(cè)的方框,選擇創(chuàng)建數(shù)據(jù)綁定,將其綁定到RadioButton的Background屬性,圓形和筆尖同理。切換到RadioButton,修改其Background屬性,可以看到矩形背景色隨之變動(dòng),如下圖;
14.選中筆頭部分Path,選中其Fill屬性,選擇漸變畫筆,調(diào)整屬性值進(jìn)行漸變填充;
15.切換到xaml,調(diào)整自動(dòng)生成的代碼,比如將Path路徑中的坐標(biāo)精確到小數(shù)點(diǎn)后一位。這樣自定義的RadioButton按鈕樣式就完成了,使用時(shí)可以再根據(jù)需求微調(diào)。
// 最終Style <Style x:Key="RadioButtonStyle1" TargetType="{x:Type RadioButton}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type RadioButton}"> <Grid x:Name="templateRoot" Background="Transparent" SnapsToDevicePixels="True"> <Rectangle Fill="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" HorizontalAlignment="Center" Height="37" Stroke="Black" VerticalAlignment="Bottom" Width="23.5" Margin="13,0"/> <Path Data="M16.4,0.76 L7.4,0.76 M7.7,0.7 C2,12.87 0.5,24.1 0.5,24.1 0.5,24.1 23.1,23.8 23.1,23.8 23.1,23.8 20.7,6.5 16,0.5" HorizontalAlignment="Center" Height="24.6" Stretch="Fill" Stroke="Black" VerticalAlignment="Top" Width="23.6" Margin="13,19.4,13,0"> <Path.Fill> <LinearGradientBrush EndPoint="0.5,0.5" MappingMode="RelativeToBoundingBox" StartPoint="0,0.5" SpreadMethod="Reflect"> <GradientStop Color="#FF626060"/> <GradientStop Color="#FFD6D3D3" Offset="0.873"/> </LinearGradientBrush> </Path.Fill> </Path> <Path Data="M21.1,19.3 C21.1,19.3 25.3,-5.5 28.2,19.2" Fill="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" HorizontalAlignment="Left" Height="12" Margin="21.2,8.3,0,0" Stretch="Fill" Stroke="Black" VerticalAlignment="Top" Width="8"/> <Ellipse Fill="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" HorizontalAlignment="Right" Height="3" Stroke="Black" VerticalAlignment="Top" Width="3" Margin="0,3,3,0" StrokeThickness="0"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
Blend繪制Path
使用Blend繪制Path的方法參考官網(wǎng)。
繪制Path
Path由一系列的直線或曲線連接而成,可以使用Line、Pen、Pencil工具繪制Path,可以在工具條中找到它們。
繪制直線
使用Pen工具:點(diǎn)擊定義直線起始點(diǎn),再次點(diǎn)擊定義直線終點(diǎn);
使用Line工具:拖動(dòng)添加直線,在直線終點(diǎn)位置釋放;
繪制曲線
使用Pen工具,點(diǎn)擊添加曲線起點(diǎn),再次點(diǎn)擊并拖動(dòng)可以添加點(diǎn)并調(diào)整兩點(diǎn)間的曲線形狀。若想閉合Path,點(diǎn)擊起點(diǎn)即可。
改變曲線形狀
使用路徑選擇工具,選中形狀,拖動(dòng)曲線上的點(diǎn)以改變形狀。
移除Path上的線段
使用路徑選擇工具,選中Path上要?jiǎng)h除的線段,點(diǎn)擊刪除按鈕。
移除Path上的點(diǎn)
使用選擇工具選中Path,使用Pen工具點(diǎn)擊Path上的點(diǎn)即可刪除。
Path添加點(diǎn)
使用選擇工具選中Path,使用Pen工具在想要添加點(diǎn)的位置點(diǎn)擊。
繪制自由的形狀
使用Pencil工具進(jìn)行繪制。
以上就是c# wpf如何使用Blend工具繪制Control樣式的詳細(xì)內(nèi)容,更多關(guān)于c# 用Blend工具繪制Control樣式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
asp.net(c#)編程實(shí)現(xiàn)將彩色圖片變灰階圖片的方法示例
這篇文章主要介紹了asp.net(c#)編程實(shí)現(xiàn)將彩色圖片變灰階圖片的方法,結(jié)合實(shí)例形式分析了C#圖片讀取及屬性操作相關(guān)技巧,需要的朋友可以參考下2017-07-07C# IEnumerable和IEnumerator接口淺析
本文主要介紹了C#中IEnumerable和IEnumerator接口的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02C# 將字節(jié)流轉(zhuǎn)換為圖片的實(shí)例方法
C# 將字節(jié)流轉(zhuǎn)換為圖片的實(shí)例方法,需要的朋友可以參考一下2013-03-03C#使用base64對(duì)字符串進(jìn)行編碼和解碼的測(cè)試
今天小編就為大家分享一篇關(guān)于C#使用base64對(duì)字符串進(jìn)行編碼和解碼的測(cè)試,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02C#關(guān)于Task.Yeild()函數(shù)的討論
這篇文章主要介紹了C#中關(guān)于Task.Yeild()函數(shù)的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07C# Ado.net實(shí)現(xiàn)讀取SQLServer數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程列表及參數(shù)信息示例
這篇文章主要介紹了C# Ado.net實(shí)現(xiàn)讀取SQLServer數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程列表及參數(shù)信息,結(jié)合實(shí)例形式總結(jié)分析了C#針對(duì)SQLServer數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程及參數(shù)信息的各種常見操作技巧,需要的朋友可以參考下2019-02-02Unity實(shí)現(xiàn)大轉(zhuǎn)盤的簡(jiǎn)單筆記
這篇文章主要為大家分享了Unity實(shí)現(xiàn)大轉(zhuǎn)盤的簡(jiǎn)單筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02