服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# WPF如何反射加载Geometry几何图形数据图标

C# WPF如何反射加载Geometry几何图形数据图标

2022-11-09 13:55Stay627 C#

这篇文章主要介绍了C# WPF如何反射加载Geometry几何图形数据图标,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下

相信大家在阅读WPF相关GitHub开源项目源码时都会看见一串串这种数据

C# WPF如何反射加载Geometry几何图形数据图标

这种Geometry数据就是几何图形数据

为什么要用Geometry数据做图标?

有一种做法是使用ttf字体文件代替,不过使用ttf字体文件会出现下面几个缺点:
1、团队协作不便于管理
2、需要依赖特定平台
3、无法灵活使用
而使用Geometry的话,我们可以将这些几何图形数据存入资源字典ResourceDictionary
通过反射进行灵活使用,团队开发可共同维护

怎么获取Geometry数据?

我们进入https://www.iconfont.cn/官网,找到心仪的图标,点击F12将鼠标放在该图标区域,找到网页元素

C# WPF如何反射加载Geometry几何图形数据图标

Path标签内的d属性即Geometry数据

如何使用Geometry数据

创建资源字典,并加入命名空间

C# WPF如何反射加载Geometry几何图形数据图标

将Geometry数据存入< Geometry x:Key="t_chart" o:Freeze="true" >< /Geometry >标签内
t_chart即资源名称key
可能会有小伙伴注意到了o:Freeze这个属性,下面是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派生的类具有以下功能:
特殊状态:只读(冻结)状态和可写状态。
线程安全:冻结的Freezable对象可以在线程之间共享。
详细的更改通知:与其他DependencyObject对象不同,Freezable对象在子属性值更改时提供更改通知。
易于克隆:Freezable类已经实现了几种产生深层克隆的方法。

随后在App.xaml中加入

?
1
<ResourceDictionary Source="Resources/Themes/Geometries.xaml" />

这样我们就可以在全局的XAML代码中通过{StaticResource t_Demo}使用Geometry数据

那么肯定会有小伙伴问了,如果想使用MVVM前后台分离开发怎么办?(在C#代码中动态使用Geometry)
下面是反射加载Geometry的示例
将资源文件存入静态类中

?
1
2
3
4
5
6
7
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值

?
1
2
3
4
5
6
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为Geometry

以上就是C# WPF如何反射加载Geometry几何图形数据图标的详细内容,更多关于WPF 反射加载图标的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/Stay627/archive/2021/03/26/14583581.html

延伸 · 阅读

精彩推荐
  • C#Asp.Net(C#)使用oleDbConnection 连接Excel的方法

    Asp.Net(C#)使用oleDbConnection 连接Excel的方法

    ADO.NET采用不同的Connection对象连接数据库。这篇文章主要介绍了Asp.Net(C#)使用oleDbConnection 连接Excel的方法,非常具有实用价值,需要的朋友可以参考下...

    森大科技8942022-03-05
  • C#mvc C# JavaScript LigerUI oracle实现用户的注册、登陆验证、登陆

    mvc C# JavaScript LigerUI oracle实现用户的注册、登陆验证、登陆

    这篇文章主要介绍了mvc C# JavaScript LigerUI oracle实现用户的注册、登陆验证、登陆的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣...

    C#教程网3962021-11-18
  • C#C#基础知识之base关键字介绍

    C#基础知识之base关键字介绍

    本文主要介绍base关键字的使用方法,base关键字可以调用基类重写的方法,可以调用基类的构造方法,还可以在EntityFramework中使用,下面一一介绍。...

    Swich6872021-11-19
  • C#c#实现windows远程桌面连接程序代码

    c#实现windows远程桌面连接程序代码

    本篇文章主要介绍了c#实现windows远程桌面连接程序代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    冰不化8802022-01-05
  • C#C#9.0主要特性的一些想法

    C#9.0主要特性的一些想法

    这篇文章主要给大家介绍了关于C#9.0主要特性的一些想法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    技术译站9352022-10-13
  • C#浅析c#中WebBrowser控件的使用方法

    浅析c#中WebBrowser控件的使用方法

    以下是对c#中WebBrowser控件的使用方法进行了详细的分析介绍,需要的朋友参考下...

    C#教程网3252020-12-21
  • C#使用C#写了一个可以推算火车票身份证号码的小程序

    使用C#写了一个可以推算火车票身份证号码的小程序

    这篇文章主要介绍了使用C#写了一个可以推算火车票身份证号码的小程序 的相关资料,需要的朋友可以参考下...

    葛云飞6042021-11-11
  • C#C#飞行棋小程序设计分析

    C#飞行棋小程序设计分析

    这篇文章主要为大家设计分析了C#飞行棋小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    电杆8792021-12-06