tabcontrol selectionchanged事件 - 电子问题

时间:2014-08-13 14:29:08

标签: c# wpf events tabcontrol

我是WPF的新手,当用户在我的tabcontrol项目之间切换时,我想做点什么。 正如预期的那样,我遇到了多次触发selectionchanged事件的问题,然后我读了这篇文章:

In C# WPF, why is my TabControl's SelectionChanged event firing too often?

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

TabControl's SelectionChanged event issue

但是我遇到了一个新问题,我在stackoverflow中找不到任何相关帖子。

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

if (e.Source is TabControl){ // do something }

这两个都没有:

if (e.Source is TabItem) {// do something}

当我在调试模式下将鼠标悬停在e.Source上时,它显示为

{System.Windows.Controls.TabControl Items.Count:5}

如果我试图在WPF Tree Visualizer中查看它,它告诉我它是我期望的TabControl。

所以我的问题是,为什么它不会返回true,因为它是一个TabControl?

这是我的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();
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您必须将e.source从Object转换为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();
        }
  }