【问题标题】:WPF datagrid drag and drop target indicatorWPF datagrid 拖放目标指示器
【发布时间】:2015-11-06 17:31:30
【问题描述】:

我有一个 WPF 数据网格,用户可以在其中拖放各种行以重新排序。但是,我需要一个指示器来显示插入行的位置。

我尝试了各种“hacky”方法,包括检测鼠标移动事件和在鼠标所在的位置插入一个空白指示器行。不幸的是,似乎在拖动行时,我的鼠标移动事件都没有被触发。

【问题讨论】:

    标签: c# wpf datagrid drag-and-drop


    【解决方案1】:

    UIElement 类提供了几个可以使用的事件。 它们是:

    • DragEnter
    • 拖动
    • 拖动离开
    • 放下

    前两个是你可以使用的。

    <DataGrid DragOver="MyGrid_DragOver"
              DragEnter="MyGrid_DragEnter"
    

    我必须同时使用这两者才能让我的拖放工作。


    我通过对 move mouve 事件做出反应来开始拖动操作:

    private void MyGrid_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {    
            var dragSource = ...;
            var data = ...;
            DragDrop.DoDragDrop(dragSource, data, DragDropEffects.Move);
        }
    }
    


    然后您在目标控件(您的 DataGrid)上编写事件处理程序:

    private void MyGrid_DragOver(object sender, DragEventArgs e)
    {
        this.DragOver_DragEnter(sender, e);
    }
    
    private void MyGrid_DragEnter(object sender, DragEventArgs e)
    {
        this.DragOver_DragEnter(sender, e);
    }
    

    然后您可以设置Effects 属性以向用户提供视觉反馈:

    private void DragOver_DragEnter(object sender, DragEventArgs e)
    {
        // code here to decide whether drag target is ok
    
        e.Effects = DragDropEffects.None;
        e.Effects = DragDropEffects.Move;
        e.Effects = DragDropEffects.Copy;
        e.Handled = true;
        return;
    }
    


    也可以在 MSDN 上查看此回复:Giving drag and drop feedback using DragEventArgs.Effect

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      相关资源
      最近更新 更多