-1

当使用 XamlReader 从预定义的 xaml 文件加载我的应用程序菜单时,我发现了一个非常奇怪的问题。我需要定义的属性xml:space="preserve"和xaml是这样的:

<m:MenuManager>
   ...
    <m:Resource>
        <m:Resource.ResourceTitle>
            <sys:String xml:space="preserve">Click the Button&#xA;(InvokeCommandAction)&#xA;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&#xA;(InvokeCommandAction)&#xA;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 的对象。但是我真的需要在我的页面上保留空格,这里的代码看起来很奇怪。有人可以解释一下吗?谢谢!

4

1 回答 1

1

如果您不想添加xml:space="preserve"到所有元素,可以使用此附加参数XamlReader.Load

XamlReader.Load(xaml, new ParserContext() { XmlSpace = "preserve" });
于 2014-10-02T06:00:00.817 回答