я новичок в использовании WPF. У меня есть окно WPF с сеткой данных, которая запускает процесс при двойном щелчке. Это прекрасно работает, но когда я делаю это на планшете (с Windows 7), используя сенсорный экран, процесс никогда не происходит. Поэтому мне нужно эмулировать событие двойного щелчка с помощью событий касания. Кто-нибудь может помочь мне сделать это, пожалуйста?
Вопрос
Эмулировать событие двойного щелчка в Datagrid с помощью touchDown
Ответы
Ответ 1 · Liam McInroy
Подробнее о том, как эмулировать щелчок мышью (в окнах-формах), но он работает в 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);
}
}
}
Ответ 2 · Marcel Pennock
Сначала добавьте функцию щелчка по событию мыши:
/// <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);
}
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Эмулируйте GameLink от GameBoy Color
- Имитировать Android-приложение, сброшенное из памяти
- Python, ctypes, библиотеки DLL и эмуляция PCOMM. Как я могу предварительно выделить переменную?
- Когда мне следует использовать UserControl вместо Page?
- Подождите, пока все анимации WPF остановятся.
- .NET делает копию встроенного файлового ресурса на локальный диск