我有一个标签控件,只有用鼠标点击才能响应更改标签。
我是否需要在事件处理程序中手动编码以进行选项卡控制,尽管有Surface SDK?或者,我可以在这里使用更好的控制处理程序吗?
我觉得这对于拥有SDK来说完全是反作用的。特别是因为我计划在我的程序中有许多不同的,唯一的选项卡,并且不希望在button_TouchDown函数中使用嵌套ifs单独处理每个选项卡。我已经拥有了自定义按钮,这些按钮具有button_TouchDown设置并添加单独的选项卡控件将是一个令人头痛的问题和一堆乱码。
我试着搜索但空手而归,这让我觉得也许我错过了一些东西,它应该有效。是因为我有一个预定义的button_TouchDown函数吗?
答案 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;
}
}
}
}