C# TabItem被永久阻止
我遇到了一个非常奇怪的问题:在WPF中,我有一个包含3个tabItems的tabControl。我已经在“OneWayToSource”模式下将tabControl的SelectedIndex绑定到viewModel类中的属性 以下是XAML代码:C# TabItem被永久阻止,c#,wpf,tabcontrol,tabitem,C#,Wpf,Tabcontrol,Tabitem,我遇到了一个非常奇怪的问题:在WPF中,我有一个包含3个tabItems的tabControl。我已经在“OneWayToSource”模式下将tabControl的SelectedIndex绑定到viewModel类中的属性 以下是XAML代码: <TabControl Name="mainTabControl" SelectedIndex="{Binding SelectedTabIndex, Mode=OneWayToSource}" > <TabIte
<TabControl Name="mainTabControl" SelectedIndex="{Binding SelectedTabIndex, Mode=OneWayToSource}" >
<TabItem Header="Tab 01" Name="tab01"> ... </TabItem>
<TabItem Header="Tab 02" Name="tab02"> ... </TabItem>
<TabItem Header="Tab 03" Name="tab03"> ... </TabItem>
</TabControl>
如您所见,每当我的viewModel的SelectedTabIndex
属性更改时,就会执行SelectedTabChanged()
方法,这非常有效
我奇怪的问题是:当我在我的selectedtabchange()
方法中使用例如System.Windows.MessageBox.show(“一些文本”)
显示消息时,我选择了另一个选项卡项,而上一个选中的选项卡被阻止,看起来像是选中的,但它始终保持选中状态,我再也看不到它的内容了。
只是澄清一下:正如我之前所说的,只有在显示模式窗口时才会出现这种奇怪的问题
为什么会这样?我如何解决这个问题
我希望我能解释清楚
提前谢谢。我不能100%确定我是否理解您的问题,但是一个
消息框。Show
将产生一个嵌套的消息泵并阻止主调度程序,从而“冻结”主窗口(这就是为什么它是模态的)。
如果您需要在不显示模式的情况下显示消息框
样式的警报,那么我的建议是创建一个面板,其中包含您的消息,该面板存在于选项卡项
中,具有隐藏的可见性,然后在需要显示消息时使其可见。在这种情况下,您的选项卡选择应该仍然有效我已经解决了我的问题。由于我是WPF新手,我真的不明白为什么模态窗口会使选项卡被阻塞。但是我在搜索时发现Dispatcher类允许异步执行一个方法,该方法可以防止任何控件被阻塞
我更改了viewModel代码,如下所示:
public int SelectedTabIndex
{
get
{ return m_selectedTabIndex; }
set
{
SetAndNotify(ref m_selectedTabIndex, value, () => SelectedTabIndex);
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(SelectedTabChanged), null);
}
}
真正帮助我的是以下几点:
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(SelectedTabChanged), null);
希望这能帮助其他人遇到类似的问题。谢谢你的回复,但实际上我需要显示一个模式窗口,因为它可能是异常消息,因此,我尝试在不阻塞选项卡的情况下显示任何模式窗口。如果它是模式的,它将阻塞选项卡控件,因此没有可能的解决方案
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(SelectedTabChanged), null);