2010-10-17 2 views
1

Disons que nous avons une grille XAML comme ci-dessous - par exemple. une chaîne générée renvoyée par une méthode. Ce que je veux faire est de créer une telle grille et l'ajouter à un panneau de pile à l'exécution, des codes similaires à ceux décrits ci-dessous.Comment ajouter un contrôle de grille WPF à partir de sa chaîne XAML au moment de l'exécution?

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

La forme que j'utilise est:

<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> 

Mais je reçois l'erreur Cannot create unknow type 'Grid'. Je réussis à faire cela en ajoutant un bouton/un bloc de texte mais je n'ai pas réussi à ajouter une grille avec des contrôles imbriqués.

Si vous savez comment faire, s'il vous plaît partager. Toutes les aides sont les bienvenues et très appréciées!

Répondre

4

Ajoutez xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' au premier élément de grille dans le xaml que vous souhaitez charger. Cela déclare l'espace de noms wpf l'espace de noms par défaut dans votre xaml. XamlReader.Load peut alors savoir quel type de contrôle est.

<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> 
Questions connexes