2013-07-22 4 views
0

У меня есть элемент управления вкладкой, который только реагирует на изменение вкладок щелчком мыши.Управление вкладкой WPF с Touch Not Working

Нужно ли вручную вводить код в обработчике событий для управления вкладками, несмотря на наличие SDK поверхности? Или есть лучший контролер, который я мог бы использовать здесь?

Я чувствую, что это полностью контрпродуктивно до уровня SDK. Тем более, что я планирую иметь много разных уникальных вкладок в своей программе и не хочу обрабатывать каждую вкладку индивидуально с помощью вложенных ifs в функции button_TouchDown. У меня уже есть пользовательские кнопки, которые имеют настройку button_TouchDown и добавление отдельных элементов управления вкладками - это головная боль и адский беспорядок кода.

Я пробовал искать, но пришел с пустыми руками, что заставляет меня думать, что, возможно, я что-то упускаю, и он должен работать. Это потому, что у меня есть предопределенная функция button_TouchDown?

+1

Возможно, ваш сенсорный экран является старым и «эмулирует» мышь? У меня есть приложение WPF и сенсорный экран, который отлично работает. Возможно, часть вашего «беспорядка кода» отключает что-то. – kenny

ответ

2
private void TabItem_TouchDown(object sender, TouchEventArgs e) 
    { 
     TabItem tab = sender as TabItem; 
     TabControl control = tab.Parent as TabControl; 
     control.SelectedItem = tab; 
     e.Handled = true; 
    } 

XAML

<TabItem x:Name="hccontactTab" Header="Phone" TouchDown="TabItem_TouchDown"> 
+0

почти! убедитесь, что вы не установили e.Handled в true, если текущая вкладка уже правильная. иначе прокрутка для каждого касания больше не будет работать – uTILLIty

0

Исходя из вышеизложенного ответа, но расширение для учета прокрутки на ощупь. Используйте ClassHandler, чтобы справиться с этим чисто внутри приложения (я использую IStartable AutoFac для авто зарегистрировать его во время строительства контейнера):

using System.Windows; 
using System.Windows.Controls; 
using Autofac; 

namespace ...ClassHandlers 
{ 
    public class TabItemTouchClassHandler : IStartable 
    { 
     public void Start() 
     { 
      Register(); 
     } 

     public void Register() 
     { 
      EventManager.RegisterClassHandler(typeof(TabItem), UIElement.TouchDownEvent, new RoutedEventHandler(OnTabItemTouchDown)); 
     } 

     //must be static! otherwise memory leaks! 
     private static void OnTabItemTouchDown(object ender, routedEventArgs e) 
     { 
      var tab = sender as TabItem; 
      var control = tab?.Parent as TabControl; 
      if (control != null && !Equals(tab, control.SelectedItem)) 
      { 
       control.SelectedItem = tab; 
       e.Handled = true; 
      } 
     } 
    } 
} 
Смежные вопросы