我有一个TabControl,可以在每个TabItem中包含一个TabControl。有xaml代码:
<TabControl Height="300" Width="500" MouseWheel="TabControl_MouseWheel">
<TabItem Header="1" Width="50">
<TabControl MouseWheel="TabControl_MouseWheel">
<TabItem Header="1" Width="50"></TabItem>
<TabItem Header="2" Width="50"></TabItem>
<TabItem Header="3" Width="50"></TabItem>
<TabItem Header="4" Width="50"></TabItem>
<TabItem Header="5" Width="50"></TabItem>
<TabItem Header="6" Width="50"></TabItem>
<TabItem Header="7" Width="50"></TabItem>
<TabItem Header="8" Width="50"></TabItem>
<TabItem Header="9" Width="50"></TabItem>
</TabControl>
</TabItem>
<TabItem Header="2" Width="50">
<TabControl MouseWheel="TabControl_MouseWheel">
<TabItem Header="1" Width="50"></TabItem>
<TabItem Header="2" Width="50"></TabItem>
<TabItem Header="3" Width="50"></TabItem>
<TabItem Header="4" Width="50"></TabItem>
<TabItem Header="5" Width="50"></TabItem>
<TabItem Header="6" Width="50"></TabItem>
<TabItem Header="7" Width="50"></TabItem>
<TabItem Header="8" Width="50"></TabItem>
<TabItem Header="9" Width="50"></TabItem>
</TabControl>
</TabItem>
<TabItem Header="3" Width="50"></TabItem>
<TabItem Header="4" Width="50"></TabItem>
<TabItem Header="5" Width="50"></TabItem>
<TabItem Header="6" Width="50"></TabItem>
<TabItem Header="7" Width="50"></TabItem>
<TabItem Header="8" Width="50"></TabItem>
<TabItem Header="9" Width="50"></TabItem>
</TabControl>
我想通过鼠标滚轮更改选定的tabcontrols项目。有MouseWheel事件处理程序:
private void TabControl_MouseWheel(object sender, MouseWheelEventArgs e)
{
TabControl tabControl = sender as TabControl;
if (tabControl != null)
{
if (e.Delta < 0)
{
if (tabControl.SelectedIndex + 1 < tabControl.Items.Count)
tabControl.SelectedItem = tabControl.Items[tabControl.SelectedIndex + 1];
}
else
{
if (tabControl.SelectedIndex - 1 > -1)
tabControl.SelectedItem = tabControl.Items[tabControl.SelectedIndex - 1];
}
}
}
问题是使用鼠标滚动滚动只会更改上方TabControl中的选定项目。我希望其他TabControls也能对鼠标转动作出反应。
例如:如果光标在上面的一个TabControl项目中,那么我希望它们对鼠标滚轮的滚动作出反应,否则我希望下面的TabControls项目对滚动做出反应。
答案 0 :(得分:1)
内部TabControls
会做出反应,但你几乎没有注意到外部标签也会切换,只需在处理程序的最后添加行e.Handled = true
,它应该按预期的那样工作将不再bubble通过外部处理程序。
(顺便说一下,因为事件起泡你可以让这个工作只在外部TabControl上为事件添加一个处理程序,你需要稍微更改处理程序上的逻辑以获得“最接近” TabControl虽然)