c# - TabControl 的 SelectionChanged 事件问题

标签 c# wpf tabcontrol

我在 WPF 上工作,我正在创建一个 userControl,它包含一个 TabControl,它有一些 TabItems。

我需要在所选选项卡更改时执行一些操作,因此,我尝试做的是使用事件 myTabControl.SelectionChanged 但它被引发了很多次,即使我只点击了一次一个选项卡项。然后我读了这篇文章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
        }
    }
}

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

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

我希望有人能帮助我,在此先感谢你。

最佳答案

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

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

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

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

关于c# - TabControl 的 SelectionChanged 事件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022504/

相关文章:

c# - 从上一页检索数据

C# 相当于 VB LINQ 查询

wpf - F# wpf 异步命令完成状态

c# - 在用户控件中公开控件的 itemsource 属性

c# - WPF XAML 绑定(bind)不更新

wpf - 如何将TabControl样式应用到特定的选项卡控件?

c# - 在选项卡之间切换时,如何将焦点恢复到之前聚焦的 TabPage 控制

c# - 如何在没有接口(interface)的情况下模拟多重继承?

c# - 交换 BindingList<SomeClass> 元素需要花费大量时间,为什么会这样,我应该做什么?

wpf - 如何在 WPF MVVM 中动态设置 View 的 DataContext