Я нашел очень странную проблему, когда использовать 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
(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"
он будет работать хорошо, и я могу получить объект MenuManager путем вызова метода XamlReader.Load
только once.But мне действительно нужно держать пустое пространство на моей странице, и код здесь выглядит так странно. Может ли кто-нибудь объяснить это? Спасибо!
также сообщил, как ошибка https://connect.microsoft.com/VisualStudio/feedback/details/615562/xml-space-preserve-off-of-of-scope-when-used-two-in -ested-elements, возможно, используется внутри, поэтому можно зарезервировать слово. –
Да, я обновляю версию sl от 4 до 5, и она была решена – yihao