1. 程式人生 > >WPF 反射載入Geometry幾何圖形資料圖示

WPF 反射載入Geometry幾何圖形資料圖示

相信大家在閱讀WPF相關GitHub開源專案原始碼時都會看見一串串這種資料 ![image](https://img2020.cnblogs.com/blog/1310644/202103/1310644-20210326175417303-1722430312.png)這種Geometry資料就是幾何圖形資料 ## 為什麼要用Geometry資料做圖示? 有一種做法是使用ttf字型檔案代替,不過使用ttf字型檔案會出現下面幾個缺點: 1、團隊協作不便於管理 2、需要依賴特定平臺 3、無法靈活使用 而使用Geometry的話,我們可以將這些幾何圖形資料存入資源字典ResourceDictionary 通過反射進行靈活使用,團隊開發可共同維護 ## 怎麼獲取Geometry資料? 我們進入[https://www.iconfont.cn/](https://www.iconfont.cn/ "https://www.iconfont.cn/")官網,找到心儀的圖示,點選F12將滑鼠放在該圖示區域,找到網頁元素 ![image](https://img2020.cnblogs.com/blog/1310644/202103/1310644-20210326181447394-1169207074.png) Path標籤內的d屬性即Geometry資料 ## 如何使用Geometry資料 建立資源字典,並加入名稱空間 ![image](https://img2020.cnblogs.com/blog/1310644/202103/1310644-20210326182203145-1965389431.png) 將Geometry資料存入標籤內 t_Demo即資源名稱key o:Freeze屬性設定Geometry不可修改,隨後在App.xaml中加入 ```csharp `````` 這樣我們就可以在全域性的XAML程式碼中通過{StaticResource t_Demo}使用Geometry資料 那麼肯定會有小夥伴問了,如果想使用MVVM前後臺分離開發怎麼辦?(在C#程式碼中動態使用Geometry) 下面是反射載入Geometry的示例 將資原始檔存入靜態類中 ```csharp 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值 ```csharp var chart = new HandyControl.Controls.TabItem() { Header="圖表", Content = xamlModel }; chart.SetValue(IconElement.GeometryProperty, (Geometry)LocalTheme.Dic["t_chart"]); ````````` SetValue即設定附加屬性 public void SetValue(DependencyProperty dp, object value); 中的value為G