C# WPF选项卡控制,触摸不工作

C# WPF选项卡控制,触摸不工作,c#,wpf,navigation,pixelsense,C#,Wpf,Navigation,Pixelsense,我有一个选项卡控件,只对鼠标单击更改的选项卡作出响应 尽管有Surface SDK,我是否需要手动在事件处理程序中为选项卡控件编写代码?或者这里有更好的控制处理器吗 我觉得这样做完全是适得其反的,以至于有了SDK。特别是因为我计划在我的程序中有很多不同的、独特的选项卡,不想在按钮着陆功能中使用嵌套的ifs单独处理每个选项卡。我已经有了自定义的按钮,这些按钮都有按钮触地设置,添加单独的选项卡控件将是一件令人头痛的事情,而且代码也非常混乱 我试着寻找,但空手而归,这让我觉得也许我遗漏了什么,应该有用

我有一个选项卡控件,只对鼠标单击更改的选项卡作出响应

尽管有Surface SDK,我是否需要手动在事件处理程序中为选项卡控件编写代码?或者这里有更好的控制处理器吗

我觉得这样做完全是适得其反的,以至于有了SDK。特别是因为我计划在我的程序中有很多不同的、独特的选项卡,不想在按钮着陆功能中使用嵌套的ifs单独处理每个选项卡。我已经有了自定义的按钮,这些按钮都有按钮触地设置,添加单独的选项卡控件将是一件令人头痛的事情,而且代码也非常混乱

我试着寻找,但空手而归,这让我觉得也许我遗漏了什么,应该有用。是因为我有一个预定义的按钮和接地功能吗

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


基于上述答案,但针对每次触摸的滚动进行了增强。在应用程序中使用ClassHandler干净地处理此问题(我使用AutoFac的iStatable在构建容器期间自动注册):


也许你的触摸屏很旧,而且“模仿”了鼠标?我有一个WPF应用程序和一个工作正常的触摸屏。也许你的一些“乱七八糟的代码”正在禁用某些东西。几乎!如果当前选项卡已经正确,请确保未将e.Handled设置为true。否则,每次触摸滚动将不再有效
 <TabItem x:Name="hccontactTab" Header="Phone" TouchDown="TabItem_TouchDown">
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;
            }
        }
    }
}