Largeurs de colonne de synchronisation WPF DataGrid
J'en ai deux WPF Toolkit DataGrids
j'aimerais donc que lorsque l'utilisateur redimensionne la première colonne de la première grille, il redimensionne la première colonne de la deuxième grille. J'ai essayé de liaison de la largeur de la DataGridColumn
dans la deuxième grille à la colonne appropriée dans la première grille, mais il ne fonctionne pas. Je préfère utiliser tous les xaml, mais je suis très bien avec l'aide de code derrière.
<tk:DataGrid Width="100" Height="100">
<tk:DataGrid.Columns>
<tk:DataGridTextColumn x:Name="Column1" Width="50"/>
</tk:DataGrid.Columns>
</tk:DataGrid>
<tk:DataGrid Width="100" Height="100">
<tk:DataGrid.Columns>
<tk:DataGridTextColumn x:Name="Column1Copy" Width="{Binding Path=ActualWidth, ElementName=Column1}"/>
</tk:DataGrid.Columns>
</tk:DataGrid>
J'ai aussi essayé de liaison à Width
au lieu de ActualWidth
mais aucun ne fonctionne.
Toute aide est grandement appréciée.
source d'informationauteur viggity
Vous devez vous connecter pour publier un commentaire.
Bien, je ne pense pas qu'il est possible d'utiliser directement le code XAML, mais je me sens toujours comme il le devrait parce que
DataGridColumn
ne tirent deDependencyObject
. J'ai trouvé un moyen de le faire par programmation. Je ne suis pas heureux à ce sujet, mais il fonctionne:Vous pouvez utiliser le
DataGrid
LayoutUpdated
méthode pour manipuler d'autres objets concernant les largeurs de colonne.J'ai essayé ceci:
Cependant, Il semble depuis
DataGridColumn
s ne dérivent pas deFrameworkElement
mais au lieu de dériver à partir deDependencyObject
la liaison de cette manière n'est pas disponible.Si vous souhaitez lier la Largeur de la colonne de la propriété dans le code XAML, 2
DataGrid
's que vous avez à faire ce qui suit.Dans la première
DataGrid
nom de laDataGridTextColumn
:Dans la deuxième
DataGrid
ajouter unDiscreteObjectKeyFrame
pointant vers le ci-dessus mentionné colonne comme une ressource, et utiliser lesBinding
àWidth
bien sur laDataGridTextColumn
vous voulez "link":J'ai trouvé une solution à ce problème, et un extra cool solution 🙂
Vous pouvez télécharger le WPF toolkit et obtenir le code de la grille de données.
Une fois que vous avez le code, tout ce que vous avez à faire est de changer le DataGridColumn classe d'hériter FrameworkElement au lieu de DependencyObject.
Une fois que vous le faites - vous êtes de gauche avec un seul problème, le DataContext de la colonne ne serait pas initialisé depuis que la colonne ne fait pas partie de l'arborescence logique, de l'ajouter à l'arborescence logique serait de les résoudre.
Vous pouvez le faire comme ceci:
Où la OnColumnInitialization est:
private void OnColumnInitialization(object sender, EventArgs e)
{
AddLogicalChild(expéditeur);
}
Maintenant que c'est une partie de l'arborescence logique, vous avez le même contexte de données et vous pouvez utiliser la liaison sur le
La largeur de la propriété.
Si tous sont liés à la même Largeur - vous avez une synchronisation de la Largeur de vos colonnes.
Cela a fonctionné pour moi 🙂
Gili