我有一个 WPF 数据网格,其中添加了将列标题拖到列表框以根据上一篇文章进行分组的功能将 DataGrid 列标题拖放到标签上?. 我遇到的一个问题是,当调用 DoDragDrop 函数时,它会禁用 Datagrid 的单击排序功能。有没有办法拖放列标题进行分组,但仍然可以单击排序?
private void DataGridHeader_PreviewMouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
var header = e.OriginalSource as ContentControl;
if (header != null)
{
DragDrop.DoDragDrop(header, new DataObject(typeof(string), header.Content.ToString()), DragDropEffects.Move);
e.Handled = true;
}
}
}
private void ListBox_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(string)))
{
var columnName = (string)e.Data.GetData(typeof(string));
this.GroupedColumns.Add(columnName);
var sourceView = CollectionViewSource.GetDefaultView(this.DataGrid.ItemsSource);
sourceView.GroupDescriptions.Add(new PropertyGroupDescription(columnName));
sourceView.Refresh();
e.Handled = true;
}
}
我正在通过 XAML 参与事件
ListBox Name="HeaderListBox" VerticalContentAlignment="Center" ItemsSource="{Binding GroupedColumns}" AllowDrop="True" Margin="5" Drop="ListBox_Drop"
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<EventSetter Event="PreviewMouseMove" Handler="DataGridHeader_PreviewMouseMove"/>
</Style>
</DataGrid.ColumnHeaderStyle>