я новичок в использовании WPF. У меня есть окно WPF с сеткой данных, которая запускает процесс при двойном щелчке. Это прекрасно работает, но когда я делаю это на планшете (с Windows 7), используя сенсорный экран, процесс никогда не происходит. Поэтому мне нужно эмулировать событие двойного щелчка с помощью событий касания. Кто-нибудь может помочь мне сделать это, пожалуйста?
Эмулировать событие двойного щелчка в Datagrid с помощью touchDown
Ответы (2)
Подробнее о том, как эмулировать щелчок мышью (в окнах-формах), но он работает в WPF, выполнив:
using System.Runtime.InteropServices;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
public void DoMouseClick()
{
//Call the imported function with the cursor's current position
int X = //however you get the touch coordinates;
int Y = //however you get the touch coordinates;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
}
}
person
Liam McInroy
schedule
11.07.2012
Сначала добавьте функцию щелчка по событию мыши:
/// <summary>
/// Returns mouse click.
/// </summary>
/// <returns>mouseeEvent</returns>
public static MouseButtonEventArgs MouseClickEvent()
{
MouseDevice md = InputManager.Current.PrimaryMouseDevice;
MouseButtonEventArgs mouseEvent = new MouseButtonEventArgs(md, 0, MouseButton.Left);
return mouseEvent;
}
Добавьте событие клика в один из ваших элементов управления WPF:
private void btnDoSomeThing_Click(object sender, RoutedEventArgs e)
{
// Do something
}
Наконец, вызовите событие клика из любой функции:
btnDoSomeThing_Click(new object(), MouseClickEvent());
Чтобы имитировать двойной щелчок, добавьте событие двойного щелчка, например PreviewMouseDoubleClick, и убедитесь, что любой код начинается в отдельной функции:
private void lvFiles_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
DoMouseDoubleClick(e);
}
private void DoMouseDoubleClick(RoutedEventArgs e)
{
// Add your logic here
}
Чтобы вызвать событие двойного щелчка, просто вызовите его из другой функции (например, KeyDown):
private void someControl_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
DoMouseDoubleClick(e);
}
person
Marcel Pennock
schedule
24.04.2014