如何有效地保留.Net字体对象?

时间:2020-03-06 14:34:37  来源:igfitidea点击:

用例:用户对设计图面上的对象进行字体自定义,我需要将其加载/保存到我的数据存储中。 IE。诸如粗体,斜体,大小,字体名称之类的设置需要保留。

是否有一些简单(可靠)的机制可以从字体对象的字符串表示形式进行转换/读回(在这种情况下,我只需要一个属性)?还是将多个属性与自定义逻辑结合在一起是正确的选择?

解决方案

使用TypeConverter:

Font font = new Font("Arial", 12, GraphicsUnit.Pixel);

TypeConverter converter = TypeDescriptor.GetConverter(typeof (Font));

string fontStr = converter.ConvertToInvariantString(font);

Font font2 = (Font) converter.ConvertFromString(fontStr);

Console.WriteLine(font.Name == font2.Name); // prints True

如果要使用XML序列化,则可以创建Font类包装器,该包装器将存储Font属性的某些子集。

注意(Gishu)切勿直接访问类型转换器。而是,使用TypeDescriptor访问适当的转换器。很重要 :)

我们需要哪种类型的数据存储区来保留该数据存储区?如果仅仅是用户设置可以保存在文件中,则可以将字体对象序列化为二进制或者xml中的设置文件(如果我们希望能够直接编辑配置文件)。序列化名称空间(System.Xml.Serialization和System.Runtime.Serialization)提供了无需编写自定义代码即可完成此操作的所有工具。

MSDN网站XML序列化:.Net Framework中的XML序列化

[EDIT]因此,字体对象目前无法序列化。哎呀,对不起。

在我正在进行的项目中,我使用了多个属性。

我通过分解字体的名称,大小,样式和单位将字体保存到数据库表中,然后保留这些值。

一旦检索到这些值,便可以按需重新创建字体。