DataGrid - 用于通过在WPF中的列标题上拖动鼠标指针来选择多个列 [英] DataGrid - For selecting multiple column by dragging the mouse pointer on the Column Header in WPF
问题描述
DataGrid需要支持通过在列标题上拖动鼠标指针来选择多个列
您好
这是克里希南。我试图通过使用WPF在DataGrid的列标题上拖动鼠标指针来选择多个列。在你的一个论坛上你提到过这个功能并没有在WPF DataGrid中支持 I
会请求一些支持我们是否有相同的解决办法。或者要安装任何修补程序以将其作为DataGrid的默认行为。
嗨 Krishnan84,
>>我试图选择多列使用 拖动DataGrid列标题上的鼠标指针
您可以尝试以下步骤:
1)在ColumnHeaderStyle中添加PreviewMouseMove事件处理程序。
2)在事件处理程序中,启动拖放操作。$
您可以参考以下样本:
xaml:
< Grid>
< Grid.RowDefinitions>
< RowDefinition />
< RowDefinition />
< /Grid.RowDefinitions>
< ListBox x:Name =" MyGroupDescriptionsList" Grid.Row = QUOT; 0"的AllowDrop = QUOT;真"降= QUOT; ListBox_Drop" />
< DataGrid x:Name =" MyDataGrid" Grid.Row = QUOT 1 QUOT;的ItemsSource = QUOT; {结合}"的AutoGenerateColumns = QUOT假QUOT;>
< DataGrid.ColumnHeaderStyle>
< Style TargetType =" {x:Type DataGridColumnHeader}">
< EventSetter Event =" PreviewMouseMove"处理机= QUOT; DataGridHeader_PreviewMouseMove" />
<! - < EventSetter Event =" PreviewMouseLeftButtonDown"处理机= QUOT;&的PreviewMouseLeftButtonDown QUOT; /> - >
< / Style>
< /DataGrid.ColumnHeaderStyle>
< DataGrid.Columns>
< DataGridTextColumn Header =" A" Binding =" {Binding A}">
< DataGridTextColumn Header =" B" Binding =" {Binding B}">
< DataGridTextColumn Header =" C" Binding =" {Binding C}">
< /DataGrid.Columns>
< / DataGrid>
< / Grid>XAML.CS:
公共部分类DataGriddropheader:Window
{
ObservableCollection< testobj> jb2 = new ObservableCollection< testobj>();
public DataGriddropheader()
{
InitializeComponent();
jb2.Add(new testobj(){Name =" Yo",A =" 123",B =" 562",C =" 16900"}};
jb2.Add(new testobj(){Name =" Yo",A =" Huy",B =" hjk",C =" err"});
jb2.Add(new testobj(){Name =" Hye",A =" YUI",B =" qaz",C =" rty"});
jb2.Add(new testobj(){Name =" Hye",A =" mml",B =" ijk",C =" yui"});
MyDataGrid.ItemsSource = jb2;
}
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运算(字符串));
MyGroupDescriptionsList.Items.Add(columnName);
e.Handled = true;
}
}
}
最好的问候,
Yong Lu
Support required on DataGrid for selecting multiple column by dragging the mouse pointer on the Column Header
Hi
This is Krishnan here. I was trying to select multiple column by dragging the mouse pointer on the column header of DataGrid using WPF. On one of your forum you have mentioned this feature is not suported in WPF DataGrid I would request some support whetherdo we have any work around for the same. or any Patch to be installed to get this as a default behaviour of DataGrid.
Hi Krishnan84,
>>I was trying to select multiple column by dragging the mouse pointer on the column header of DataGrid using
You can try the following steps:
1) Add the PreviewMouseMove event handler in the ColumnHeaderStyle.
2) In event handler, initiate drag/drop operation.
You can refer the following sample:xaml:
<Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <ListBox x:Name="MyGroupDescriptionsList" Grid.Row="0" AllowDrop="True" Drop="ListBox_Drop"/> <DataGrid x:Name="MyDataGrid" Grid.Row="1" ItemsSource="{Binding}" AutoGenerateColumns="False"> <DataGrid.ColumnHeaderStyle> <Style TargetType="{x:Type DataGridColumnHeader}"> <EventSetter Event="PreviewMouseMove" Handler="DataGridHeader_PreviewMouseMove"/> <!--<EventSetter Event="PreviewMouseLeftButtonDown" Handler="PreviewMouseLeftButtonDown" />--> </Style> </DataGrid.ColumnHeaderStyle> <DataGrid.Columns> <DataGridTextColumn Header="A" Binding="{Binding A}"/> <DataGridTextColumn Header="B" Binding="{Binding B}"/> <DataGridTextColumn Header="C" Binding="{Binding C}"/> </DataGrid.Columns> </DataGrid> </Grid>
XAML.CS:
public partial class DataGriddropheader : Window { ObservableCollection<testobj> jb2 = new ObservableCollection<testobj>(); public DataGriddropheader() { InitializeComponent(); jb2.Add(new testobj() { Name = "Yo", A = "123", B = "562", C = "16900" }); jb2.Add(new testobj() { Name = "Yo", A = "Huy", B = "hjk", C = "err" }); jb2.Add(new testobj() { Name = "Hye", A = "YUI", B = "qaz", C = "rty" }); jb2.Add(new testobj() { Name = "Hye", A = "mml", B = "ijk", C = "yui" }); MyDataGrid.ItemsSource = jb2; } 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)); MyGroupDescriptionsList.Items.Add(columnName); e.Handled = true; } } }Best Regards,
Yong Lu
这篇关于DataGrid - 用于通过在WPF中的列标题上拖动鼠标指针来选择多个列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!