WPF 反射載入Geometry幾何圖形資料圖示
阿新 • • 發佈:2021-03-26
相信大家在閱讀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