当使用 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
调用该方法时,只会返回 tag 内的单词<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 的对象。但是我真的需要在我的页面上保留空格,这里的代码看起来很奇怪。有人可以解释一下吗?谢谢!