2012-07-11 4 views
5

Ich bin neu mit WPF. Ich habe ein WPF-Fenster mit einem Datagrid, das einen Prozess startet, wenn ein Doppelklick erfolgt. Das funktioniert großartig, aber wenn ich dies in einem Tablet (mit Windows 7) über den Touchscreen mache, passiert der Prozess nie. Also muss ich das Doppelklickereignis mit Berührungsereignissen emulieren. Kann mir bitte jemand helfen?Emulieren Doppelklick Ereignis in Datagrid mit TouchDown

Antwort

0

Siehe How to simulate Mouse Click in C#?, wie ein Mausklick (in Windows-Formulare) zu emulieren, aber es funktioniert in WPF, indem Sie:

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); 
    } 
} 
} 
+0

Vielen Dank! – sonseiya

+0

@somseiya Kein Problem –

0

Zuerst fügen Sie ein Mausereignis Klickfunktion:

/// <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; 
} 

ein Click-Ereignis zu einem Ihrer WPF-Steuerelemente hinzufügen:

private void btnDoSomeThing_Click(object sender, RoutedEventArgs e) 
{ 
    // Do something 
} 

Schließlich Rufen Sie das Click-Ereignis von jeder Funktion:

btnDoSomeThing_Click(new object(), MouseClickEvent()); 

Doppelklick zu simulieren, ein Doppelklickereignis wie Preview hinzufügen und sicherstellen, dass jeder Code beginnt in einer separaten Funktion:

private void lvFiles_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    DoMouseDoubleClick(e); 
} 

private void DoMouseDoubleClick(RoutedEventArgs e) 
{ 
    // Add your logic here 
} 

zu Rufen Sie das Doppelklickereignis auf, rufen Sie es einfach von einer anderen Funktion (wie KeyDown) an:

private void someControl_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
     DoMouseDoubleClick(e); 
} 
Verwandte Themen