1

我使用 AvalonDock 具有类似 vs 的停靠风格,并使用 prism 在我的应用程序中注入视图。
基本上,用户将在侧面有一个面板,每个视图可加载一个按钮,每次他按下一个按钮时,我想在我的 AvalonDock 的 DocumentPane 上创建一个新选项卡,并在其中注入正确的视图。

现在我的印象是棱镜适合这种情况,但我无法弄清楚。

此外,我偶然发现了 Markus Raufer 的 DocumentPane 和 DockablePane 区域适配器,已将其添加到我的项目中并在引导程序中注册了映射。
这使我可以编译解决方案(所以我猜我已经接近了)。

到目前为止,我这样做:

在我的Shell我有一个地方:

<avadock:DocumentPane avadock:ResizingPanel.ResizeWidth="500" Background="Transparent"
                      prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}">
</avadock:DocumentPane>

在我的代码隐藏中,在引导等之后,我有一个地方可以:

m_RegionManager.Regions[RegionNames.MainTabControlRegion].Add(oneOfMyUserControls);

执行此行不会向用户显示更多内容,但如果我执行两次,它会出错,说明视图已经注册(所以它确实添加了一些东西!)。

此外,当我放置一个常规的 ContentControl 时,标记它prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}然后在其中添加一个 UserControl,就像我将它添加到 AvalonDock 的 DocumentPane 一样,它可以工作。怪异的

我究竟做错了什么?
谢谢,

粑粑

编辑:
如果像这样定义 MainTabControlRegion,实际上添加了第一个视图,现在我添加了另一个视图(不同的 UserControl)它没有显示它,但是 WPF Inspector 说它在那里。
从我的角度来看,它确实将 UserControls 添加到一个区域,但它不知道如何为我添加到 DocumentPane 的每个 UserControl 创建一个新选项卡。
由于我没有具体说明,我可能遗漏了一段代码?

<avadock:DocumentPane avadock:ResizingPanel.ResizeWidth="500" Background="Transparent">
    <avadock:DocumentContent Title="" prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}">

    </avadock:DocumentContent>
</avadock:DocumentPane>

每次我添加用户控件并将其插入其中时,我都希望它创建一个新选项卡。

编辑2:解决方案->在这里

4

1 回答 1

2

此问题可能由多种原因引起。

或者 RegionAdapter 不太适合您尝试添加的用户控件,因此我建议您查看RegionAdapter 实现,以便您可以很好地了解它如何在区域中调整您的视图并对其进行自定义以适应您的需求。

或者您正在添加的用户控件具有特定的行为,并且在 RegionAdapter 尝试将您的视图添加到 DocumentPane 项目时对其进行了窃听。因此,您可以自定义 RegionAdapter 或修复用户控制行为。

或者它只是一个数据绑定问题。第一次执行时什么都没有显示的事实有点奇怪。尝试使用WPF Inspector检查您的 DocumentPane 属性绑定。在处理自定义 RegionAdapter 时,它不止一次救了我的命。

于 2011-09-14T13:40:49.537 回答