2012-05-07 2 views
-1

Я нашел очень странную проблему, когда использовать XamlReader для загрузки меню моего приложения из предопределенного файла xaml. мне нужно определить атрибут xml:space="preserve" и XAML, как это: странная проблема при использовании XamlReader для загрузки xaml с помощью xml: space = "preserve"

<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, он возвращает только слова в теге <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" он будет работать хорошо, и я могу получить объект MenuManager путем вызова метода XamlReader.Load только once.But мне действительно нужно держать пустое пространство на моей странице, и код здесь выглядит так странно. Может ли кто-нибудь объяснить это? Спасибо!

+0

также сообщил, как ошибка https://connect.microsoft.com/VisualStudio/feedback/details/615562/xml-space-preserve-off-of-of-scope-when-used-two-in -ested-elements, возможно, используется внутри, поэтому можно зарезервировать слово. –

+0

Да, я обновляю версию sl от 4 до 5, и она была решена – yihao

ответ

1

если вы не хотите, чтобы добавить xml:space="preserve" ко всем элементам, можно использовать этот дополнительный параметр XamlReader.Load:

XamlReader.Load(xaml, new ParserContext() { XmlSpace = "preserve" });