C# tabcontrol selectionchanged事件--例如源问题

C# tabcontrol selectionchanged事件--例如源问题,c#,wpf,events,tabcontrol,C#,Wpf,Events,Tabcontrol,我是WPF新手,我想在用户在tabcontrol项之间切换时做一些事情。 正如所料,我遇到了多次触发selectionchanged事件的问题,然后我读了这篇文章: , 我不喜欢第一种解决方案,它需要太多额外的代码来处理应用程序中每个选择器的事件。因此,我在这篇文章中尝试了解决方案: , 但我有一个新问题,我在stackoverflow中找不到任何相关的帖子 我遇到的问题是以下代码不返回true: if (e.Source is TabControl){ // do something } 这

我是WPF新手,我想在用户在tabcontrol项之间切换时做一些事情。 正如所料,我遇到了多次触发selectionchanged事件的问题,然后我读了这篇文章:

,

我不喜欢第一种解决方案,它需要太多额外的代码来处理应用程序中每个选择器的事件。因此,我在这篇文章中尝试了解决方案:

,

但我有一个新问题,我在stackoverflow中找不到任何相关的帖子

我遇到的问题是以下代码不返回true:

if (e.Source is TabControl){ // do something }
这两个都不是:

if (e.Source is TabItem) {// do something}
当我在调试模式下悬停在e.Source上时,它显示为

{System.Windows.Controls.TabControl项。计数:5}

如果我试图在WPF树可视化工具中查看它,它会告诉我这是我所期望的TabControl

所以我的问题是,既然它是TabControl,为什么它不返回true

以下是我的SelectionChanged代码:

    void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.Source is TabControl)
        {
            if (item1.IsSelected)
            {
                myllist1.DataContext = getList1();
            }
            else if (item2.IsSelected)
            {
                mylist2.DataContext = getlist2();
            }
            else if (item3.IsSelected)
            {
                mylist3.DataContext = getlist3();
            }
            else if (item4.IsSelected)
            {
                mylist4.DataContext = getlist4();
            }
        }
    }

必须将e.source从对象转换为FrameworkElement,然后比较类型

if (((FrameworkElement)e.Source).GetType()== typeof(System.Windows.Controls.TabControl))
  {
   if (item1.IsSelected)
        {
            myllist1.DataContext = getList1();
        }
        else if (item2.IsSelected)
        {
            mylist2.DataContext = getlist2();
        }
        else if (item3.IsSelected)
        {
            mylist3.DataContext = getlist3();
        }
        else if (item4.IsSelected)
        {
            mylist4.DataContext = getlist4();
        }
  }

你试过用“发件人”而不是“e.Source”吗?@Xcalibur37请看我对答案的回答#2BTW,我只是好奇,在我读过的所有帖子中,没有人提出这个问题,所以我猜它们在没有转换的情况下都运行良好?它们可能没有其他选项卡项控件会引发selectionchanged事件(这就是问题所在),或者,他们可能已经在每个冒泡到该事件的控件上设置了e.handled=true,以便它永远不会到达容器事件。不过,我很高兴我帮了忙!