TabControl的SelectionChanged事件问题

2024-03-27

我正在 WPF 上工作,我正在创建一个 userControl,其中包含一个 TabControl,其中有一些 TabItem。

当所选选项卡更改时,我需要执行一些操作,因此,我尝试做的是使用该事件myTabControl.SelectionChanged但它被提出了很多次,即使我只点击了一次 TabItem。然后我读了这篇文章标准 wpf 选项卡控件中是否有选定选项卡更改事件 https://stackoverflow.com/questions/772841/is-there-selected-tab-changed-event-in-the-standard-wpf-tab-control并将此代码放入我的方法中:

void mainTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.Source is TabControl)
    {       
        //do work when tab is changed
    }
}

这样做之后,第一个问题已经解决,但是当我运行应用程序并尝试更改选项卡时,出现了错误:

Dispatcher processing has been suspended, but messages are still being processed

Visual Studio 指向里面的第一行代码if (e.Source is TabControl) { //here }

但我找到了这篇文章选择因未知原因而更改事件触发异常 https://stackoverflow.com/questions/4504310/selectionchanged-event-firing-exceptions-for-unknown-reasons我可以通过编写如下代码来解决这个问题:

void mainTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.Source is TabControl)
    {       
        if (this.IsLoaded)
        {
            //do work when tab is changed
        }
    }
}

但现在我遇到了另一个我无法解决的问题:

该事件已触发两次!另一个奇怪的事情是,只有当我第一次尝试更改所选选项卡时,事件才会引发两次,但所选选项卡仍然相同

我希望有人能帮助我,提前谢谢你。


我想我需要休息一下,因为我的问题真的很愚蠢:

事实证明,而不是TabControl我应该用过TabItem因为这是我感兴趣的控件。

所以,我的代码必须如下所示:

 void mainTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.Source is TabItem)
        {       
            if (this.IsLoaded)
            {
                //do work when tab is changed
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TabControl的SelectionChanged事件问题 的相关文章

随机推荐