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