WPF-检测显式选项卡选择与程序性选项卡选择

时间:2018-07-29 20:29:21

标签: wpf

我有一个应用程序,该应用程序要根据用户是显式单击选项卡还是通过设置hSelectedIndex通过代码激活选项卡来将焦点明确设置到TabItem内容内的特定内容。具体来说,我不想以编程方式选择时将焦点设置到嵌入式文档的内容上(因为我可以通过代码显式地对其进行强制设置),但是当通过Tab标头单击激活时,我不想设置它。

我无法有效拦截制表符标题单击操作。选项卡和选项卡内容容器的点击似乎不会触发,并且在SelectedIndex_Changed事件内部没有迹象表明激活源自何处。

有什么想法可以用来确定明确的手动还是程序化选项卡激活?

1 个答案:

答案 0 :(得分:0)

我对此有一个解决方案。您可以在选项卡标题上捕获鼠标单击事件并设置一个布尔标志。然后在选项卡控件的“ SelectionChanged”事件中检查相同的标志,您可以在此处进行此类设置焦点的操作,然后重置标志以标识进一步的点击。这是示例代码。

<TabControl SelectionChanged="TabControl_SelectionChanged">
    <TabItem>
        <TabItem.Header>
             <TextBlock Text="ABC" MouseDown="TextBlock_MouseDown"/>
        </TabItem.Header>
        <!--<TabItem.InputBindings>
             <MouseBinding Gesture="LeftClick"  />
        </TabItem.InputBindings>-->
    </TabItem>
    <TabItem Header="XYZ" />
</TabControl>

在后面的代码中,您可以像这样检查

 private void TabControl_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            if(isClicked)
            {
                //you can set focus here
                isClicked = false;
            }

        }

        private void TextBlock_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            isClicked = true;
        }

如果要设置变量或采取任何必要的操作,也可以尝试使用选项卡项目的输入绑定来检测鼠标单击并引发命令。如果您关注MVVM,这种方法将很有用