2012-07-11 17 views
5

Jestem nowy przy użyciu WPF. Mam okno WPF z datagridem, które uruchamia proces po dwukrotnym kliknięciu. Działa to świetnie, ale kiedy robię to w tablecie (z Windows 7), używając ekranu dotykowego, proces nigdy się nie zdarza. Muszę więc emulować podwójne kliknięcie zdarzeniami dotykowymi. Czy ktoś może mi w tym pomóc?Emuluj podwójne kliknięcie zdarzenie w Datagrid z touchDown

Odpowiedz

0

Zobacz How to simulate Mouse Click in C#? dla jak emulować kliknięcie myszy (w systemie Windows formach), ale działa w WPF wykonując:

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

Dziękuję bardzo! – sonseiya

+0

@somseiya Bez problemu –

0

Pierwszy dodać funkcję myszy zdarzenie kliknij:

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

Dodaj zdarzenie click do jednego z formantów WPF:

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

Wreszcie Zadzwoń zdarzenie click z dowolnej funkcji:

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

Aby zasymulować podwójne kliknięcie, dodać kliknij dwukrotnie zdarzenie jak PreviewMouseDoubleClick i upewnij się, że każdy kod rozpoczyna się w oddzielnej funkcji:

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

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

Aby wywołaj zdarzenie z podwójnym kliknięciem, po prostu wywołaj je z innej funkcji (np. KeyDown):

private void someControl_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
     DoMouseDoubleClick(e); 
} 
Powiązane problemy