我在项目中的资源文件中嵌入了ResourceDictionary。这本字典包含一堆几何图形。WPF:解析几何体忽略语言
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Geometry x:Key="pin">M20.5,15L11.5,15C10.396,15 9.5,15.896 9.5,17 9.5,18.104 10.396,19 11.5,19L20.5,19C21.604,19 22.5,18.104 22.5,17 22.5,15.896 21.604,15 20.5,15z M13.583,8L12.5,14 19.5,14 18.416,8 13.583,8z M16,29L17.5,20 14.5,20 16,29z M13,7L19,7C19.828,7 20.5,6.328 20.5,5.5 20.5,4.672 19.828,4 19,4L13,4C12.171,4 11.5,4.672 11.5,5.5 11.5,6.328 12.171,7 13,7z</Geometry>
<Geometry ...
</ResourceDictionary>
我能够载入字典,而无需使用任何问题:
var rd = Application.LoadComponent(new Uri(path, UriKind.Relative)) as ResourceDictionary;
当我检查字典项的值,我得到不同的结果我的电脑是否使用英语或法语文化。
当我的电脑用的是英语,这个值是:
M20.5,15L11.5,15C10.396,15 9.5,1...
但如果我的PC使用法语,值是:
M20,5;15L11,5;15C10,396;15 9,5;1...
,然后当我尝试使用Geometry.Parse,它断言由于字符串不使用标准几何命名法。
foreach (DictionaryEntry entry in dictionary)
{
var Data = Geometry.Parse(entry.Value.ToString()); <--- ASSERTS HERE
...
而不是Application.LoadComponent,我尝试使用XamlReader来解析嵌入式词典:
var info = Application.GetResourceStream(new Uri(path, UriKind.Relative));
var context = new ParserContext() { XmlLang = "en-US" };
var reader = new XamlReader();
var rd = reader.LoadAsync(info.Stream, context) as ResourceDictionary;
我最终有我的字典项内相同的结果。字符仍然被转换。这就像parsercontext被忽略。
我试图迫使语言在资源字典的根与XML:LANG =“EN-US”,我试图迫使其几何里面的物品。我无法收到未更改的字符串。角色最终取代。
结论:我唯一能做的就是取代';'与','和','与'。'。但这只适用于法国文化。这不是我正在寻找的解决方案。
任何人都可以帮助我理解如何正确加载我的资源,而不会受到文化欺负吗?
你让我很快乐。我不知道在保留当前文化的同时将字符串转换为几何图形。非常感谢! – BriocheBro
@BriocheBro你不能将一个字符串转换成一个'Geometry',但是资源中的对象不是一个字符串,它已经是'Geometry'的一个实例。 –