2015-04-16 1 views
0

Je développe une application mobile pour contrôler à distance une interface utilisateur WPF. L'interface utilisateur est gérée par un tiers et ce tiers peut ajouter des boutons \ remove à tout moment. Je diffuse l'interface utilisateur vers l'application Windows Store du client et envoie les coordonnées tactiles au serveur. Le serveur utilise ensuite HitTest pour obtenir l'élément sur l'interface utilisateur WPF et exécuter l'action.Utilisation de HitTest pour le contrôle à distance WPF

Cela fonctionne la plupart du temps, mais le rappel de filtre n'est pas appelé plusieurs fois. Ceci est un code fictif.

private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     Point p = new Point(77, 45); 
     // Coordinates received on server comes here 
     VisualTreeHelper.HitTest(this, 
            new HitTestFilterCallback(FilterCallback), 
            new HitTestResultCallback(ResultCallback), 
            new PointHitTestParameters(p)); 
    } 
    private HitTestFilterBehavior FilterCallback(DependencyObject target) 
    { 
     System.Diagnostics.Debug.WriteLine(target.GetType()); 
     if (typeof(Button) == target.GetType()) 
     { 
      Button b = (Button)target; 
      Button_Click(b, null); 
      return HitTestFilterBehavior.Stop; 
     } 
     else 
     { 
      return HitTestFilterBehavior.Continue; 
     } 
    } 
    private HitTestResultBehavior ResultCallback(HitTestResult result) 
    { 
     System.Diagnostics.Debug.WriteLine(result.VisualHit.GetType()); 
     return HitTestResultBehavior.Stop; 
    } 
+0

Des succès ici? – Clemens

+0

L'application utilise un volet popup pour montrer certains contrôles, après que ce volet est activé pour la première fois, il est masqué en utilisant la propriété de visibilité, donc chaque fois que je teste une coordonnée, je reçois la référence au volet popup invisible qui est au sommet. J'ai contacté le développeur de l'application pour une solution. – Suneesh

+0

Ensuite, vous devriez continuer le test de réussite, en retournant 'Continue' au lieu de' Stop' de votre ResultCallback. Avez-vous au moins essayé cela? – Clemens

Répondre

1

Vous devez retourner Continue de votre HitTestResultCallback. Dans le cas contraire, le test de hit ne traverse pas l'arborescence visuelle complète et peut s'arrêter avant d'avoir atteint le contrôle Button.

private HitTestResultBehavior ResultCallback(HitTestResult result) 
{ 
    return HitTestResultBehavior.Continue; 
} 

Voir l'article Hit Testing in the Visual Layer sur MSDN pour plus de détails.