Создание сетки из строки с использованием XamlReader - PullRequest
1 голос
/ 24 сентября 2010

У меня есть строковое представление таблицы 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>

Что мне нужно сделать, это создать объект 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, который я просто не вижу?Или подход плохой?

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

Ответы [ 2 ]

2 голосов
/ 26 сентября 2010

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

0 голосов
/ 24 сентября 2010

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

...