使用情况:用户对设计表面上的对象进行字体自定义,我需要将其加载/保存到我的数据存储中。例如,需要持久化设置如粗体、斜体、大小、字体名称等。
是否有一种简单(且可靠)的机制可以将字体对象的字符串表示转换/读回(在这种情况下,我只需要一个属性)?还是多个属性结合自定义逻辑是正确的选项?
使用情况:用户对设计表面上的对象进行字体自定义,我需要将其加载/保存到我的数据存储中。例如,需要持久化设置如粗体、斜体、大小、字体名称等。
是否有一种简单(且可靠)的机制可以将字体对象的字符串表示转换/读回(在这种情况下,我只需要一个属性)?还是多个属性结合自定义逻辑是正确的选项?
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序列化,可以创建字体类包装器,其中将存储一些字体属性的子集。
注意(Gishu) - 永远不要直接访问类型转换器。相反,通过使用TypeDescriptor来访问适当的转换器。非常重要 :)
ConvertFromInvariantString()
应该作为ConvertToInvariantString()
的对应方法使用(而不是上面示例中看到的ConvertFromString()
)。 - miroxlav