我发现一个非常奇怪的问题,何时使用XamlReader从预定义的xaml文件加载我的应用程序的菜单。
我需要定义xml:space="preserve"
的属性,xaml是这样的:
<m:MenuManager>
...
<m:Resource>
<m:Resource.ResourceTitle>
<sys:String xml:space="preserve">Click the Button
(InvokeCommandAction)
View</sys:String>
</m:Resource.ResourceTitle>
</m:Resource>
...
</m:MenuManager>
将xaml内容加载到字符串并使用XamlReader.Load
将其转换为MenuManager对象。当第一次调用XamlReader.Load
方法时,它只返回标记<sys:String xml:space="preserve">
中的单词,而预期结果仅在第二次返回。
var uri = new Uri("/Sample;component/Assets/Menu.xaml", UriKind.Relative);
var info = Application.GetResourceStream(uri);
string xaml = null;
using (StreamReader reader = new StreamReader(info.Stream))
{
xaml = reader.ReadToEnd();
}
//when the first time load, only a string value of
//"Click the Button
(InvokeCommandAction)
View" is returned
var temp1 = XamlReader.Load(xaml);
//when the second time load, all menu content loaded successfully and
//converted to the object of MenuManager
readXaml = XamlReader.Load(xaml) as MenuManager;
当我删除属性xml:space="preserve"
或将其更改为xml:space="default"
时,它会正常工作,我只能通过调用方法XamlReader.Load
获取MenuManager的对象。但我真的需要保留我页面上的空白,这里的代码看起来很奇怪。有人可以解释一下吗?
谢谢!
答案 0 :(得分:1)
如果您不想将xml:space="preserve"
添加到所有元素,则可以将此附加参数用于XamlReader.Load
:
XamlReader.Load(xaml, new ParserContext() { XmlSpace = "preserve" });