Bonjour,
J'ai un datagrid auquel je donne un style pour les headers de colonne:
Dans le code, voici comment est "géré" la chose (pour l'instant j'essaye de faire que ça marche, le traitement n'est pas complet, loin de là):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <Style x:Key="ColumnHeaderStyle" TargetType="{x:Type tk:DataGridColumnHeader}"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <StackPanel> <TextBlock Text="{Binding}" MouseMove="MouseMoveMethode" Background="Red" Width="100" Height="100" PreviewMouseLeftButtonDown="DataGridHeader_PreviewMouseLeftButtonDown" PreviewMouseMove="DataGridHeader_PreviewMouseMove" /> </StackPanel> </DataTemplate> </Setter.Value> </Setter> </Style> <DockPanel x:Name="xRegroupement" Grid.Row="0" Background="Aqua" AllowDrop="True" Drop="PanelRegroupement_Drop"> </DockPanel> <DataGrid x:Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="False" ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}" >
Mon problème est que, au lancement, je ne peux pas réordonner les colonnes du Grid par Drag & Drop, par contre je peux lancer MON Drag & Drop. Une fois celui-ci effectué une fois, je ne peux plus le relancer, par contre je peux réordonner les colonnes....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 private void DataGridHeader_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { _startPointGridHeader = e.GetPosition(null); } private void DataGridHeader_PreviewMouseMove(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed && !IsDraggingGridHeader) { Point position = e.GetPosition(null); if (System.Math.Abs(position.X - _startPointGridHeader.X) > SystemParameters.MinimumHorizontalDragDistance || System.Math.Abs(position.Y - _startPointGridHeader.Y) > SystemParameters.MinimumVerticalDragDistance) { // Le sender est le TextBlock créé par le template appliqué aux headers de colonnes IsDraggingGridHeader = true; if (DragDrop.DoDragDrop(this.dg, ((TextBlock)sender).Text, DragDropEffects.Move) != DragDropEffects.None) { } IsDraggingGridHeader = false; } } } void PanelRegroupement_Drop(object sender, DragEventArgs e) { IDataObject data = e.Data; if (data.GetDataPresent(DataFormats.Text)) { xRegroupement.Children.Add(new TextBox { Text = ((string)data.GetData(DataFormats.Text)), Width=50, Height=50 } ); } }
Quelqu'un a-t-il une idée ou déjà mis ce genre de chose en place?
Partager