我在 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/