DataGrid - 用于通过在WPF中的列标题上拖动鼠标指针来选择多个列 [英] DataGrid - For selecting multiple column by dragging the mouse pointer on the Column Header in WPF

查看:171
本文介绍了DataGrid - 用于通过在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆