繁体   English   中英

如何使用MouseWheel事件滚动嵌套TabControls的TabItems?

[英]How do I use the MouseWheel event to scroll through the TabItems of nested TabControls?

我有一个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>

我想通过鼠标滚轮来更改tabcontrol的选定项目。 有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中的选定项目。 我也希望其他TabControl也能对鼠标滚轮做出反应。

例如:如果光标在较高的TabControl项之一中,那么我希望它们对鼠标滚轮滚动做出反应,否则,我希望较低的TabControls项对滚动做出反应。

内部的TabControls确实会做出反应,但是您也几乎不会注意到外部的Tab开关也会发生变化,只需在处理程序的最后添加e.Handled = true行,它应该会按预期工作,因为事件不再冒泡到外部处理程序。

(顺便说一句,由于事件冒泡,您可以使此工作仅向外部TabControl上的事件添加处理程序,然后您需要稍微更改处理程序的逻辑以获取“最接近的” TabControl)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM