【发布时间】:2011-09-01 23:22:04
【问题描述】:
我有一个带有 TabControl 的用户界面,它最初显示一个起始页。其他项目可以通过双击内容添加到其中,例如,DataGrid。创建新选项卡时应选择它们。如果与网格中的项目对应的文档已经打开,则应该打开该文档的现有选项卡,而不是创建一个新选项卡。
我知道我应该能够通过设置 TabControl 的 SelectedItem 或 SelectedIndex 属性以编程方式选择选项卡。但是,所需的选项卡从未真正激活。如果我设置一个然后在调试器中检查 TabControl 的状态,那么这两个字段似乎都能正确更新。但是,在我继续执行后,我看到所选选项卡在 UI 中保持不变,如果我暂停并再次检查 TabControl 的状态,我会看到 SelectedItem 和 SelectedIndex 已返回到它们之前的值。另一方面,通过在 UI 中单击来选择一个选项卡,效果很好。
这是 TabControl 的声明:
<TabControl x:Name="Tabs" >
<TabItem x:Name="StartPageTab" Header="Start Page" DataContext="{Binding Path=StartPageViewModel}">
...
</TabItem>
</TabControl>
以及添加和选择标签的代码:
private void _SelectTab(MyViewModel model)
{
TabItem tab;
if (_TryFindTab(model, out tab)) Tabs.SelectedItem = tab;
}
private bool _TryFindTab(MyViewModel target, out TabItem tab)
{
foreach (TabItem item in Tabs.Items)
{
MyViewModel model = item.DataContext as MyViewModel;
if (model != null && model.Equals(target))
{
tab = item;
return true;
}
}
tab = null;
return false;
}
private void _AddTab(MyViewModel model)
{
TabItem tab = new TabItem { DataContext = model, Content = new MyView() };
Binding bind = new Binding { Source = model, Path = new PropertyPath("Name") };
tab.SetBinding(TabItem.HeaderProperty, bind);
Tabs.Items.Add(tab);
Tabs.SelectedItem = tab;
}
【问题讨论】:
-
不要在您的问题中发布答案,将其作为实际答案发布并接受它,或者摆脱问题,只是不要让它在没有接受的答案的情况下停留。
标签: c# wpf tabcontrol