TabControl的SelectionChanged事件问题

时间:2012-06-13 20:04:37

标签: c# wpf tabcontrol

我正在研究WPF,我正在创建一个userControl,其中包含一个TabControl,它有一些TabItems。

当选定的标签发生变化时,我需要执行一些操作,因此,我尝试做的是使用事件myTabControl.SelectionChanged,但它被多次提升,即使我只点击一次TabItem。然后我读了这篇文章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 }

内的第一行代码

但我找到了这篇文章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
        }
    }
}

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

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

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

1 个答案:

答案 0 :(得分:4)

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

事实证明,我应该使用TabControl代替TabItem,因为它是我感兴趣的控件。

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

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