Вопрос

У меня есть строковое представление о сетке XAML, как это:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Canvas Background="Yellow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <Label Content="textik" />
    </Canvas>
</Grid>

Что мне нужно сделать, это создать объект сетки из этой строки. Я попробовал много подходов, но до сих пор ближайший код ниже:

string content = "<Grid xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Canvas Background=\"Yellow\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Label Content=\"textik\" /></Canvas></Grid>";

// the string is created programatically, I just put it here to see what it looks like at the end of the process

Stream stream = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(content));

object objGrid = XamlReader.Load(stream);
Grid myGrid = (Grid) objGrid;

Однако возникает XAMLParsedException, говоря, что корневой элемент отсутствует.

У меня есть ошибка в XAML-коде, которое я просто не вижу? Или подход плохой?

Спасибо за ответ

Это было полезно?

Решение

Какая версия рамки вы используете? В 4 у вас есть дополнительные классы в System.xaml, которые более гибкими. Вы можете использовать System.Xaml.XamlServices.Load(stream); Чтобы получить точный объект сетки в свободном XAML. Однако, используя как 4 и 3.5 в VS2010, ваш точный код (во втором фрайнете) возвращает ожидаемый результат. Не уверен, что проблема на вашей стороне, но это не может быть, который вы разместили.

Другие советы

Попробуйте также добавить xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" к элементу корневого сетки. Также вам снова не нужны XMLNS в холсте (но он тоже не повредит - за исключением того, что ваши строки становятся ненужными больными).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top