我有一個在將觸摸支持添加到.NET(v 4.0)之前編寫的WPF項目,因此只處理了鼠標事件。當用手指在觸摸屏上測試項目時,我遇到了這個問題。WPF無法從MouseDown事件獲取觸摸位置
問題是,在第一次觸摸中位置(X,Y)被正確檢索,但(X,Y)值在後續觸摸中保持不變,無論我觸摸哪個位置,即使觸摸了的圖像,MouseDown事件被觸發,這使得它更奇怪。它可以在.NET 3.0/3.5/4.0中複製,在Win7/Win8上測試,都是64位。它似乎是MouseDown事件是行爲不端,MouseUp工作正常。
更新:
這是一個歷史悠久的錯誤和MS還沒有固定它(甚至4.5),所以你必須,如果你遇到同樣的症狀更新代碼 - 得到觸摸來自Touch事件的位置,而不是Mouse事件。幸運的是,這個bug並不是微妙的,所以它只需要一段時間來定位和修復。
代碼來重現問題:
XAML:
<Window x:Class="WpfApplication1.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">
<Grid>
<Image Height="60" Width="80" x:Name="Image" MouseDown="Image_MouseDown"
Source="/WpfApplication1;component/Images/Desert.jpg" />
</Grid>
</Window>
後面的代碼:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Image_MouseDown(object sender, MouseButtonEventArgs e)
{
Point p = e.GetPosition(Image);
MessageBox.Show(p.X.ToString() + " " + p.Y.ToString());
}
}
}
是的,處理TouchDown事件適用於我。但它在我看來更像是框架本身的一個明顯錯誤,因爲與鼠標點擊很好地協作的遺留代碼預計可以在觸摸時很好地工作。 – kennyzx
@kennyzx我可以通過一個示例新項目來重現此問題,所以是的,它看起來像是一個問題,或者只是添加了觸摸支持的方式。 –
我接受你的答案關閉線程:) – kennyzx