0

我有一个选项卡控件,它只响应通过鼠标单击更改选项卡。

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

我觉得这与拥有 SDK 完全相反。特别是因为我计划在我的程序中有很多不同的、独特的选项卡,并且不想在 button_TouchDown 函数中使用嵌套的 if 单独处理每个选项卡。我已经有自定义按钮,这些按钮设置了 button_TouchDown 并且添加单独的选项卡控件将是一件令人头疼的事情,而且是一堆乱七八糟的代码。

我尝试搜索但空手而归,这让我觉得也许我错过了一些东西,它应该可以工作。是因为我有一个预定义的 button_TouchDown 功能吗?

4

2 回答 2

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">
于 2013-07-23T13:31:01.630 回答
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;
            }
        }
    }
}
于 2016-08-08T07:13:00.400 回答