Эмулировать событие двойного щелчка в Datagrid с помощью touchDown

я новичок в использовании WPF. У меня есть окно WPF с сеткой данных, которая запускает процесс при двойном щелчке. Это прекрасно работает, но когда я делаю это на планшете (с Windows 7), используя сенсорный экран, процесс никогда не происходит. Поэтому мне нужно эмулировать событие двойного щелчка с помощью событий касания. Кто-нибудь может помочь мне сделать это, пожалуйста?


person sonseiya    schedule 11.07.2012    source источник


Ответы (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