我是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();
}
}
}
答案 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();
}
}