触摸不起作用的WPF选项卡控件

时间:2013-07-22 17:30:55

标签: c# wpf navigation pixelsense

我有一个标签控件,只有用鼠标点击才能响应更改标签。

我是否需要在事件处理程序中手动编码以进行选项卡控制,尽管有Surface SDK?或者,我可以在这里使用更好的控制处理程序吗?

我觉得这对于拥有SDK来说完全是反作用的。特别是因为我计划在我的程序中有许多不同的,唯一的选项卡,并且不希望在button_TouchDown函数中使用嵌套ifs单独处理每个选项卡。我已经拥有了自定义按钮,这些按钮具有button_TouchDown设置并添加单独的选项卡控件将是一个令人头痛的问题和一堆乱码。

我试着搜索但空手而归,这让我觉得也许我错过了一些东西,它应该有效。是因为我有一个预定义的button_TouchDown函数吗?

2 个答案:

答案 0 :(得分: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">

答案 1 :(得分:0)

基于上面的答案,但增强了占每次触摸的滚动。使用ClassHandler在您的应用程序中干净利落地处理(我使用AutoFac的IStartable在构建容器时自动注册它):

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