當鼠標在拖動時移動時,我想獲取鼠標位置。拖動時始終獲取鼠標位置
這是我最小的不工作例如:
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);
}
}
}
正如你所看到的:我有一個名爲TextBlock
_positionTextBlock
它應該在拖動時顯示當前的鼠標位置。
編輯(長故事):我有一個綠色的直角,可以在紅色的矩形上拖動和下垂。我的要求是,拖動綠色矩形時顯示鼠標位置。
我該怎麼做?
我曾嘗試:
改變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
- 活動不火:
private void DoDrag(object sender, MouseButtonEventArgs ev)
{
_dragSource.GiveFeedback +=
(s, e) => _positionTextBlock.Text = Mouse.PrimaryDevice.GetPosition(_canvas).ToString();
DragDrop.DoDragDrop(_dragSource, "abc", DragDropEffects.Move);
}
但這似乎得到窗口位置在屏幕座標。
而這就是我卡住的地方。有人有什麼主意嗎?使用PreviewMouseMove
第二個編輯
嘗試QueryContinueDrag事件。 – Maximus
我試過了,但是有''GiveFeedback'事件,沒有'GetPosition()' –