2011-12-27 6 views
0

J'implémentent la solution décrite ici dans un projet MVVM: http://nui.joshland.org/2010/04/why-wont-wpf-controls-work-with-touch.htmlWPF Touch Events + Flicks?

Mais le problème est que si je mets en œuvre les gestionnaires TouchDown et événements TouchUp dans le UserControl dans mon XAML alors je lance un problème où les autres GroupView ne peut pas obtenir les messages de fenêtre pour les films - OU les films ne peuvent pas être traités de sorte que leur message de fenêtre associé ne soit jamais envoyé.

La structure descendante des vues est: ButtonsView - a touch gestionnaires d'événements GroupView - a des gestionnaires d'événements de souris et les gestionnaires d'événements Flicks

J'utilise cela dans le code-behind de accrocher les films et les manipuler:

private void UserControl_Loaded(object sender, RoutedEventArgs e) 
    { 
     HwndSource source = PresentationSource.FromVisual(this) as HwndSource; 
     source.AddHook(WndProc); 
    } 

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
    { 
     if (msg == Flicks.WM_TABLET_FLICK) 
     { 
      Flick flick = Flicks.ProcessMessage(lParam, wParam); 
      if (flick != null) 
      { 
       if (flick.Data.Direction == FLICKDIRECTION.FLICKDIRECTION_LEFT) 
        Scroller("left"); //scrolls left 
       else if (flick.Data.Direction == FLICKDIRECTION.FLICKDIRECTION_RIGHT) 
        Scroller("right"); //scrolls right 
       else if (flick.Data.Direction == FLICKDIRECTION.FLICKDIRECTION_UP) 
        Scroller("up"); //move up 
       else if (flick.Data.Direction == FLICKDIRECTION.FLICKDIRECTION_DOWN) 
        Scroller("down"); //move down 
        handled = true; 
      } 
     } 
     return IntPtr.Zero; 
    } 

Pensées/Suggestions? Je suis assez nouveau à WPF. Merci

Répondre

0

J'ai résolu ceci en capturant les événements de la souris et les événements de flick dans le ButtonsView afin qu'ils ne tunneliseraient pas vers le GroupView.