我正在研究 WPF,我正在创建一个 userControl,其中包含一个具有一些 TabItems 的 TabControl。
当所选的选项卡更改时,我需要执行一些东西,所以,我尝试做的是使用该事件,myTabControl.SelectionChanged但它是多次提出的,即使我只点击了一个tabItem。然后我读了这篇文章is-re-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
}
}
Run Code Online (Sandbox Code Playgroud)
这样做之后,第一个问题已经解决,但是当我运行应用程序并尝试更改选项卡时,出现了一个错误:
Dispatcher processing has been suspended, but messages are still being processed
Run Code Online (Sandbox Code Playgroud)
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是现在我遇到了另一个我无法解决的问题:
事件被触发两次!另一个奇怪的事情是,只有当我第一次尝试更改所选选项卡时,事件才会引发两次,但所选选项卡仍然相同
我希望有人可以帮助我,在此先感谢您。
我想我需要休息一下,因为我的问题真的很愚蠢:
事实证明,TabControl我不应该使用TabItem它,因为它是我感兴趣的控件。
所以,我的代码必须如下:
void mainTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabItem)
{
if (this.IsLoaded)
{
//do work when tab is changed
}
}
}
Run Code Online (Sandbox Code Playgroud)