DataGrid&鼠标事件作为参数

时间:2016-10-06 16:45:48

标签: c# wpf c#-4.0 data-binding mouseevent

尝试将文本文件从WPF DataGrid拖放到记事本/ excel。 我试图在MainViewModel中使用此代码:

    private void FileDragDrop(object sender, MouseEventArgs e)
    {
        try
        {
            Process.Start(Path.Combine(ResultSnapshotFolder, cell));
            if (e.MiddleButton != MouseButtonState.Pressed) return;
            var d = new DataObject();
            d.SetData(DataFormats.Serializable, SelectedRow);
            d.SetData(DataFormats.Text, SelectedRow.ToString());
            DragDrop.DoDragDrop(grid, d, DragDropEffects.Copy);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

XAML mousebinding:

     <MouseBinding
                MouseAction="MiddleClick"
                Command="{Binding FileDragDrop}"
                CommandParameter="{Binding ElementName=FileGrid }" />

下面是重载的DelegateCommand,用于不同的鼠标操作:

     public void Execute(object parameter)
    {
        _execute(parameter);
    }

    public void Execute(object parameter, MouseEventArgs argsMouse)
    {
        _dataGridDragDrop(parameter, argsMouse);
    }

我的问题是“Execute(object parameter)”总是在运行时执行,好像,“MouseEventArgs argsMouse”永远不会从XAML视图传递到带有DataGrid对象的MainViewModel。

基本上我只能在运行带有2个参数的方法时运行带有1个参数的方法。

有没有人知道解决这个问题的方法或不同的方法?

1 个答案:

答案 0 :(得分:1)

如果您只想获取按下鼠标按钮的信息,那么您就不需要MouseEventArgs

只需更改

if (e.MiddleButton != MouseButtonState.Pressed) return;

if (Mouse.MiddleButton != MouseButtonState.Pressed) return;

你应该好好去。

事实上,MouseEventArgs公开的几乎所有属性和方法也都是由静态类Mouse公开的。