ItemsControl avec en-tête statique
Je pense avoir une assez simple but mais ne peut pas sembler l'atteindre.
Tout ce que je veux atteindre est d'avoir un ItemsControl (parce que je ne veux pas la fonctionnalité de sélection d'une liste) avec un en-tête. De préférence, un en-tête statique.
Actuellement, je suis en utilisant une grille pour l'en-tête et la copie de cette grille dans le ItemTemplate (DataTemple) de la ItemsControl, puis de les placer l'un au-dessus de l'autre dans une grille. Ça fonctionne, mais sa ce n'est pas toujours la ligne joliment etc.
J'ai ensuite trouvé le HeaderedItemsControl j'ai pensé que c'était une idée brillante, mais ne peux pas le faire fonctionner, il n'a tout simplement pas afficher l'en-tête.
J'ai essayé le suivant;
- Juste d'entrer du texte dans la "Tête" de la Xaml
- Placer une grille avec TextBlocks avec du texte statique dans la ItemsControl.Balise d'en-tête
- Placer la grille dans le HeaderTemplate (Datatemplate) et de la lier à un objet simple
Je suis en train de faire tout cela dans le Mélange dans un petit projet avant de le déplacer dans la production de l'app et je suis juste à l'aide d'un simple échantillon de la source de données que j'ai créé.
J'ai peut-être de manquer le bateau complètement ici, mais toute aide serait appréciée.
Mon code est comme suit, la première est ma HeaderedItemsControl
<HeaderedItemsControl Header="HeaderedItemsControl"
ItemsSource="{Binding Collection, Mode=Default}"
ItemTemplate="{DynamicResource ItemsControlDataTemplate}"
HeaderTemplate="{DynamicResource ItemsControlHeaderDataTemplate}"/>
ensuite, j'ai une ItemTemple qui fonctionne comme prévu
<DataTemplate x:Key="ItemsControlDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Property1, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" HorizontalAlignment="Stretch" Margin="0" />
<TextBlock Text="{Binding Property2, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0" />
</Grid>
</DataTemplate>
et puis l'en-tête d'un air de défi s'opposant à son éthique de travail, je l'ai essayé avec de liaison et avec juste du texte brut dans le TextBlock.Texte de la propriété
<DataTemplate x:Key="ItemsControlHeaderDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Header.Header1, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" HorizontalAlignment="Stretch" Margin="0"/>
<TextBlock Text="{Binding Header.Header2, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0"/>
</Grid>
</DataTemplate>
source d'informationauteur Organ Grinding Monkey
Vous devez vous connecter pour publier un commentaire.
HeaderedItemsControl n'a pas un style par défaut, il est donc juste en utilisant le modèle de la base de la classe ItemsControl, ce qui ne rend pas tout d'en-Tête. Il n'est utilisé que par le cadre de la classe de base de MenuItem, Barre d'outils, et TreeViewItem, qui définissent leurs propres modèles. Vous pouvez créer votre propre modèle, qui comprend un ContentPresenter pour l'en-tête:
Si vous n'utilisez en un seul endroit, il pourrait être plus facile d'utiliser une plaine ItemsControl et inclure votre en-tête directement dans le modèle de contrôle.
Aussi, il semble que vous essayez d'avoir deux grilles dont les colonnes ont la même largeur. Vous pouvez regarder la Taille de la grille de Partage dans WPF. Si vous définissez la Grille.IsSharedSizeScope sur un contrôle parent, alors vous pouvez définir SharedSizeGroup sur des colonnes de différentes grilles de leur donner la même largeur.
Suis tombé sur quelque chose de similaire hier - pour la HeaderedContentControl, essayez de définir l'en-Tête et de ne pas le HeaderTemplate de la propriété.
J'ai trouvé qu'il est impossible d'obtenir des liaisons de travail via le HeaderTemplate - le contenu était de liaison correctement. Je serais très intéressé si quelqu'un explique le raisonnement.
Espère que ma solution de contournement ci-dessus permet de.
Chris