【发布时间】:2015-12-02 16:02:22
【问题描述】:
我想在拖动时鼠标移动时获取鼠标位置。
这是我最小的不工作示例:
MainWindow.xaml:
<Window x:Class="WpfApplication8.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas x:Name="_canvas" Background="Green">
<TextBlock x:Name="_positionTextBlock"/>
<Rectangle x:Name="_dragSource"
Width="20"
Height="50"
Fill="Blue"
Canvas.Top="150"
Canvas.Left="20"
PreviewMouseDown="DoDrag"/>
<Rectangle x:Name="_dragTarget"
Width="60"
Height="70"
Fill="Red"
Canvas.Top="110"
Canvas.Left="300"
AllowDrop="True"/>
</Canvas>
</Window>
MainWindow.xaml.cs:
using System.Windows;
using System.Windows.Input;
namespace WpfApplication8
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void DoDrag(object sender, MouseButtonEventArgs e)
{
DragDrop.DoDragDrop(_dragSource, "abc", DragDropEffects.Move);
}
}
}
如您所见:我有一个名为 _positionTextBlock 的 TextBlock,它应该在拖动时显示当前鼠标位置。
编辑(长篇大论):我有一个可以拖放到红色矩形上的绿色矩形。我的要求是,在拖动绿色矩形时显示鼠标位置。
我该怎么做?
我尝试过的:
将MainWindow的构造函数改为:
public MainWindow()
{
InitializeComponent();
DragOver += (s, e) => _positionTextBlock.Text = e.GetPosition(_canvas).ToString();
}
但这只会显示鼠标在红色矩形上时的位置。
我也试过了:
public MainWindow()
{
InitializeComponent();
MouseMove += (s, e) => _positionTextBlock.Text = e.GetPosition(_canvas).ToString();
}
但是MouseMove-Event 在拖动时不会触发
我也试过了:
private void DoDrag(object sender, MouseButtonEventArgs ev)
{
_dragSource.GiveFeedback +=
(s, e) => _positionTextBlock.Text = Mouse.PrimaryDevice.GetPosition(_canvas).ToString();
DragDrop.DoDragDrop(_dragSource, "abc", DragDropEffects.Move);
}
但这似乎获得了屏幕坐标中的窗口位置。
这就是我卡住的地方。有人知道吗?
【问题讨论】:
-
尝试 QueryContinueDrag 事件。
-
我试过了,但是有,比如
GiveFeedback事件,没有GetPosition()
标签: wpf drag-and-drop position mouse drag