2015-04-16 3 views
0

Я разрабатываю мобильное приложение для удаленного управления WPF-интерфейсом. Пользовательский интерфейс управляется третьей стороной, и третье лицо может добавлять \ удалять кнопки в любое время. Я передаю пользовательский интерфейс клиентскому приложению Windows store и отправляет сенсорные координаты на сервер. Затем сервер использует HitTest, чтобы получить элемент в интерфейсе WPF и запустить действие.Использование HitTest для удаленного управления WPF

Это работает большую часть времени, но обратный вызов фильтра не вызван несколько раз. Это фиктивный код.

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

Любой успех здесь? – Clemens

+0

Приложение использует панель всплывающих окон, чтобы отобразить некоторые элементы управления, после того как эта панель активирована в первый раз, она скрыта с использованием свойства видимости, поэтому каждый раз, когда я нажимаю на проверку координат, я получаю ссылку на невидимую всплывающую панель, которая на вершине. Я связался с разработчиком приложения для решения. – Suneesh

+0

Затем вам следует продолжить тест попадания, вернув 'Continue' вместо' Stop' из вашего ResultCallback. Вы хотя бы пробовали это? – Clemens

ответ

1

Вы должны вернуть Continue от вашего HitTestResultCallback. В противном случае тест на попадание не пройдет через полное визуальное дерево и может остановиться до того, как он достигнет элемента управления Button.

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

См Hit Testing in the Visual Layer статьи на MSDN для деталей.

Смежные вопросы