DataGrid drag & drop qui ne marche qu'une seule fois
Bonjour,
J'ai un datagrid auquel je donne un style pour les headers de colonne:
Code:
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}"
> |
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:
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 } );
}
} |
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....
Quelqu'un a-t-il une idée ou déjà mis ce genre de chose en place?