带触摸的WPF选项卡控件不工作
本文关键字:控件 工作 选项 触摸 WPF | 更新日期: 2023-09-27 18:24:12
我有一个选项卡控件,它只通过鼠标单击来响应更改的选项卡。
尽管有Surface SDK,我是否需要在事件处理程序中手动编码选项卡控件?或者有更好的控制处理程序可以在这里使用吗?
我觉得这与拥有SDK完全相反。特别是因为我计划在我的程序中有很多不同的、唯一的选项卡,并且不想用button_TouchDown函数中的嵌套if单独处理每个选项卡。我已经有了自定义按钮,这些按钮具有button_TouchDown设置,添加单独的选项卡控件将是一件令人头疼的事情,而且代码非常混乱。
我试着寻找,但一无所获,这让我想,也许我错过了什么,它应该起作用。是因为我有一个预定义的button_TouchDown函数吗?
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">
基于上述答案,但经过增强以考虑每次触摸的滚动。使用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;
}
}
}
}