2017-01-29 1 views
2

je suit XAML travail et le code C# derrière:GridView, ItemTemplate, DataTemplate obligatoire dans le code C# derrière

<Grid x:Name="MainGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <GridView ItemsSource="{Binding}"> 
     <GridView.ItemTemplate> 
      <DataTemplate> 
       <Grid Height="100" Width="150"> 
        <Grid.Background> 
         <SolidColorBrush Color="{Binding Color}"/> 
        </Grid.Background> 
        <StackPanel> 
         <StackPanel.Background> 
          <SolidColorBrush Color="{Binding Color}"/> 
         </StackPanel.Background> 
         <TextBlock FontSize="15" Margin="10" Text="{Binding Name}"/> 
        </StackPanel> 
       </Grid> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 
</Grid> 

CODE derrière:

public MainPage() 
{ 
    this.InitializeComponent(); 
    var _Colors = typeof(Colors) 
     .GetRuntimeProperties() 
     .Select(x => new 
     { 
      Color = (Color)x.GetValue(null), 
      Name = x.Name 
     }); 
    this.DataContext = _Colors; 
} 

Cela fonctionne très bien.

Mais je veux faire toute la partie XAML dans le code C# derrière. En XAML, seul MainGrid sera présent, tous ses éléments enfants et ses liaisons doivent être codés derrière.

J'ai essayé quelque chose comme ça en MainPage_Loaded événement:

private void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     GridView gridView = new GridView() 
     { 
      ItemTemplate = new DataTemplate 
      { 
       //Don't know what to add here 
      } 
     }; 

     Grid grid = new Grid(); 
     Binding bindingObject = new Binding(); 
     bindingObject.Source = this; 
     grid.SetBinding(Grid.BackgroundProperty, bindingObject); 

     //... 
     // Don't know how to add grid inside gridView in Code. 
     //... 

     MainGrid.Children.Add(gridView); 
    } 
    catch (Exception ex) 
    { 

    } 
} 

Répondre

0

d'abord tout ce que je voudrais vous conseiller de ne pas créer des éléments dans le code, sauf si vous avez une vraie bonne raison de le faire. Quoi qu'il en soit, étant donné que les modèles d'éléments sont des objets de type usine pour les contrôles (vous créez un nouveau jeu de contrôles pour chaque élément). Vous utilisez le FrameworkElementFactory pour modéliser la sous-arborescence, puis affectez-lui la propriété VisualTree du modèle d'élément.

+0

Désolé, mais FrameworkElementFactory, VisualTree semble confus pour moi. –