【发布时间】:2020-10-09 14:00:04
【问题描述】:
我正在尝试在 WPF 中的 Button 控件上开始拖放操作。我使用 Button 是因为我也想处理点击事件。
在 XAML 中添加一个按钮并处理 MouseMove 事件总是使e.LeftMouse 等于MouseButtonState.Released。
<Button MouseMove="Button_MouseMove"/>
在以下处理程序实现中,从不抛出异常。
private void Button_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
throw new Exception("It works!");
}
我注意到我放置在 Button 中并尝试处理 MouseMove 事件的任何控件都是如此。
如何处理从 Button 控件或 WPF 中按钮内的任何其他控件的拖放?
编辑 - 基于 mm8 答案的解决方案
更新后的 XAML 是:
<Button PreviewMouseDown="Button_PreviewMouseDown"
PreviewMouseUp="Button_PreviewMouseUp"
PreviewMouseMove="Button_PreviewMouseMove">
</Button>
更新的处理程序代码:
Point startPosition;
double delta = 10;
private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
startPosition = e.GetPosition(this);
}
private void Button_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
Point currentPosition = e.GetPosition(this);
if ((currentPosition - startPosition).Length < delta)
throw new Exception("MouseClick");
}
private void Button_PreviewMouseMove(object sender, MouseEventArgs e)
{
Point currentPosition = e.GetPosition(this);
double currentDelta = (currentPosition - startPosition).Length;
if (e.LeftButton == MouseButtonState.Pressed && currentDelta >= delta)
throw new Exception("DragAndDrop");
}
【问题讨论】:
-
不,它没有回答我的问题。
标签: c# wpf drag-and-drop