【问题标题】:TabControl losing selected tab on Window.ShowTabControl 在 Window.Show 上丢失选定的选项卡
【发布时间】:2012-02-25 13:35:28
【问题描述】:

我们有一个 MVVM (Cinch) 解决方案,其中包含一个带有 TabControl 的窗口。 ItemsSource 绑定到 CollectionView(从 ObservableCollection 生成的 DefaultView),IsSynchronizedWithCurrentItem=true。第一次加载 Window 时一切正常...标签显示正确,用户可以在它们之间切换。

当窗口被隐藏并再次显示时会出现问题。无论 CollectionView 中的 CurrentItem 是什么,始终会再次选择第一个选项卡。 .Show 之前的那行有 CurrentItem 作为我们想要的选项卡,但是在 .Show 操作期间选项卡会切换。

还有其他人遇到过这个问题吗?

【问题讨论】:

  • 我刚刚用演示项目对此进行了测试,但无法重现。 dl.dropbox.com/u/18919663/mvvmbug.png 2个按钮,1个隐藏,1个显示窗口,窗口有标签视图,标签在隐藏和显示之间保持不变。如果您在每次调用时重新初始化第二个窗口,它将重置。 (即 Windows2 myWin = new Window2(); myWin.Show();)
  • 如果你只是调用 .Show 和 .Hide,我不明白你为什么会看到一个问题,如果你为每个节目创建一个新实例,那是你的问题。
  • 窗口及其虚拟机在应用程序的整个生命周期中都会保留,所以我认为它与 MEFedMVVM/Cinch 框架有关。
  • 经过更多测试后,我发现问题在于关闭窗口时焦点保持在选项卡上。要修复它,我将焦点设置为选项卡控制外部的控件,只要更改所选选项卡。 span>

标签: wpf selection tabcontrol reset show-hide


【解决方案1】:

这绝对是一个 hack。但是您可以覆盖 Activated 事件并在它被重置之前存储选项卡索引,并在它重新激活时再次设置它。

protected override void OnActivated(EventArgs e)
{
    int tabControlIndex = myTabController.SelectedIndex;
    base.OnActivated(e);
    myTabController.SelectedIndex = tabControlIndex ;
}

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 2012-03-28
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多