Как добавить элемент управления сетки WPF из его строки XAML во время выполнения? - PullRequest
1 голос
/ 17 октября 2010

Допустим, у нас есть сетка XAML, как показано ниже - например. сгенерированная строка, возвращенная методом.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width='*' />
        <ColumnDefinition Width='*' />
    </Grid.ColumnDefinitions>
    <TextBlock Text='id' Grid.Column='0'/>
    <Rectangle Fill='Black' Grid.Column='1' />
</Grid>

Я хочу создать такую ​​сетку и добавить ее к стеку во время выполнения, коды должны быть такими же, как показано ниже.

XmlReader xr = XmlReader.Create(input: new StringReader(g.xaml));
var control = XamlReader.Load(xr) as Grid;
this.stackPanel.Children.Add(control);

Форма, которую я использую:

<Window x:Class='AllRibbonBrushes.MainWindow'
        xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
        xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
        Title='MainWindow' Height='223' Width='533' 
        Loaded='Window_Loaded'>
    <ScrollViewer>
       <StackPanel Name="stackPanel">
          <!--The runtime grid need to be added here-->
       </StackPanel>
    </ScrollViewer>
</Window>

Но я получаю ошибку Cannot create unknow type 'Grid'. Мне удалось сделать это, добавив кнопку / текстовый блок, но не удалось добавить сетку с вложенными элементами управления.

Если вы знаете, как это сделать, пожалуйста, поделитесь. Вся помощь приветствуется и очень ценится!

1 Ответ

4 голосов
/ 17 октября 2010

Добавьте xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' к первому элементу Grid в xaml, который вы хотите загрузить. Это объявляет пространство имен wpf пространством имен по умолчанию в вашем xaml. Затем XamlReader.Load может выяснить, что это за контроль.

<Grid xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width='*' />
        <ColumnDefinition Width='*' />
    </Grid.ColumnDefinitions>
    <TextBlock Text='id' Grid.Column='0'/>
    <Rectangle Fill='Black' Grid.Column='1' />
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...