C# WPF如何反射加載Geometry幾何圖形數(shù)據(jù)圖標(biāo)
相信大家在閱讀WPF相關(guān)GitHub開源項(xiàng)目源碼時(shí)都會(huì)看見一串串這種數(shù)據(jù)
這種Geometry數(shù)據(jù)就是幾何圖形數(shù)據(jù)
為什么要用Geometry數(shù)據(jù)做圖標(biāo)?
有一種做法是使用ttf字體文件代替,不過使用ttf字體文件會(huì)出現(xiàn)下面幾個(gè)缺點(diǎn):
1、團(tuán)隊(duì)協(xié)作不便于管理
2、需要依賴特定平臺(tái)
3、無法靈活使用
而使用Geometry的話,我們可以將這些幾何圖形數(shù)據(jù)存入資源字典ResourceDictionary
通過反射進(jìn)行靈活使用,團(tuán)隊(duì)開發(fā)可共同維護(hù)
怎么獲取Geometry數(shù)據(jù)?
我們進(jìn)入https://www.iconfont.cn/官網(wǎng),找到心儀的圖標(biāo),點(diǎn)擊F12將鼠標(biāo)放在該圖標(biāo)區(qū)域,找到網(wǎng)頁(yè)元素
Path標(biāo)簽內(nèi)的d屬性即Geometry數(shù)據(jù)
如何使用Geometry數(shù)據(jù)
創(chuàng)建資源字典,并加入命名空間
將Geometry數(shù)據(jù)存入< Geometry x:Key="t_chart" o:Freeze="true" >< /Geometry >標(biāo)簽內(nèi)
t_chart即資源名稱key
可能會(huì)有小伙伴注意到了o:Freeze這個(gè)屬性,下面是MSDN上的原文
A class that derives from Freezable gains the following features:
Special states: a read-only (frozen) state and a writable state.
Thread safety: a frozen Freezable object can be shared across threads.
Detailed change notification: Unlike other DependencyObject objects, a Freezable object provides change notifications when sub-property values change.
Easy cloning: the Freezable class has already implemented several methods that produce deep clones.
翻譯后:
從Freezable派生的類具有以下功能:
特殊狀態(tài):只讀(凍結(jié))狀態(tài)和可寫狀態(tài)。
線程安全:凍結(jié)的Freezable對(duì)象可以在線程之間共享。
詳細(xì)的更改通知:與其他DependencyObject對(duì)象不同,F(xiàn)reezable對(duì)象在子屬性值更改時(shí)提供更改通知。
易于克?。篎reezable類已經(jīng)實(shí)現(xiàn)了幾種產(chǎn)生深層克隆的方法。
隨后在App.xaml中加入
<ResourceDictionary Source="Resources/Themes/Geometries.xaml" />
這樣我們就可以在全局的XAML代碼中通過{StaticResource t_Demo}使用Geometry數(shù)據(jù)
那么肯定會(huì)有小伙伴問了,如果想使用MVVM前后臺(tái)分離開發(fā)怎么辦?(在C#代碼中動(dòng)態(tài)使用Geometry)
下面是反射加載Geometry的示例
將資源文件存入靜態(tài)類中
namespace Demo.Resources.Themes { public static class LocalTheme { public static ResourceDictionary Dic = new ResourceDictionary { Source = new Uri(@"Resources/Themes/Geometries.xaml", UriKind.Relative) }; } }
使用資源字典(Geometry)LocalTheme.Dic["t_chart"],t_chart即資源字典中的key值
var chart = new HandyControl.Controls.TabItem() { Header="圖表", Content = xamlModel }; chart.SetValue(IconElement.GeometryProperty, (Geometry)LocalTheme.Dic["t_chart"]);
SetValue即設(shè)置附加屬性
public void SetValue(DependencyProperty dp, object value);
中的value為Geometry
以上就是C# WPF如何反射加載Geometry幾何圖形數(shù)據(jù)圖標(biāo)的詳細(xì)內(nèi)容,更多關(guān)于WPF 反射加載圖標(biāo)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
win7中C#的winForm編程使用savefiledialog不能彈出保存窗體的解決方法
這篇文章主要介紹了win7中C#的winForm編程使用savefiledialog不能彈出保存窗體的解決方法,涉及針對(duì)線程的調(diào)用問題,是比較實(shí)用的技巧,需要的朋友可以參考下2014-12-12C#使用System.Environment獲取電腦的相關(guān)屬性
這篇文章主要為大家詳細(xì)介紹了C#使用System.Environment獲取電腦的相關(guān)屬性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10C#簡(jiǎn)單連接sql數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了C#簡(jiǎn)單連接sql數(shù)據(jù)庫(kù)的方法,涉及C#基于控制臺(tái)的數(shù)據(jù)庫(kù)連接創(chuàng)建于命令執(zhí)行相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06WPF使用WrapPanel實(shí)現(xiàn)虛擬化效果
這篇文章主要為大家詳細(xì)介紹了如何利用WPF WrapPanel實(shí)現(xiàn)虛擬化效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下2022-09-09C# 編碼好習(xí)慣,獻(xiàn)給所有熱愛c#的同志
c#編寫者,需要培養(yǎng)的一些好習(xí)慣2009-02-02