在没有 itemsource 的情况下关闭 Tabcontrol 的虚拟化 - WPF

Posted

技术标签:

【中文标题】在没有 itemsource 的情况下关闭 Tabcontrol 的虚拟化 - WPF【英文标题】:Turning off Virtualization for Tabcontrol without itemsource - WPF 【发布时间】:2015-02-15 15:47:45 【问题描述】:

我有一个关于 Tabcontrols 和 Oxyplot 的错误。我的 xaml 的结构是这样的:我有一个 AvalonDock 文档,其中每个文档都有 3 个硬编码选项卡。其中一个选项卡有另一个选项卡控件,每个选项卡内都有一个 Oxyplot 视图。问题是当我打开两个(有时是三个)Avalondock 文档时,出现以下异常:

This PlotModel is already in use by some other PlotView control.

我猜这是因为 tabcontrol 正在虚拟化选项卡,并且绘图模型被多次用于不同的视图。如何预防?

问题和这个很相似,

http://discussion.oxyplot.org/topic/506228-error-this-plotmodel-is-already-in-use-by-some-other-plotview-control/

但我认为它还没有解决方案。我尝试了这里给出的虚拟化关闭解决方案

http://www.codeproject.com/Articles/460989/WPF-TabControl-Turning-Off-Tab-Virtualization

并且工作正常,但这是针对来自模板的选项卡而不是来自硬编码选项卡的选项卡。

有什么想法吗?

谢谢

问候。

索尔·伊达尔戈。

【问题讨论】:

【参考方案1】:

您可以使用以下代码从 PlotModel 中删除视图

private PlotVm vm = new PlotVm();
    private void LayoutRoot_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
        var window = new PlotWindow();
        ((IPlotModel)vm.Model)?.AttachPlotView(null);
        window.DataContext = vm;

        Debug.WriteLine(vm.Model.PlotView);
        window.ShowDialog();
        Debug.WriteLine(vm.Model.PlotView);
    

【讨论】:

以上是关于在没有 itemsource 的情况下关闭 Tabcontrol 的虚拟化 - WPF的主要内容,如果未能解决你的问题,请参考以下文章

在没有父级的情况下关闭窗口(网络)

在没有触摸手势识别器的情况下关闭键盘

在没有动画的情况下关闭视图控制器后立即呈现视图控制器

有没有办法在不关闭底层流的情况下关闭 Writer?

有没有一种方法可以在不使用 ANTD 上的默认按钮的情况下关闭 Modal?

当运行它的小部件(QDialog)在没有多线程的情况下关闭时,如何停止长 for 循环?