我使用AvalonDock来实现类似vs的对接样式,我使用棱镜在我的应用程序中注入视图。
基本上用户将有一个面板,每个视图可以加载一个按钮,每次按下一个按钮,我想在我的AvalonDock的DocumentPane上创建一个新选项卡,并在其中注入正确的视图。
现在我的印象是棱镜对这种情况有好处,但我不能弄明白。
此外,我偶然发现DocumentPane and DockablePane region adapters by Markus Raufer,已将其添加到我的项目中并在引导程序中注册了映射。
这允许我编译解决方案(所以我猜我已经接近了)。
到目前为止,我这样做:
在我的Shell
我有一个地方:
<avadock:DocumentPane avadock:ResizingPanel.ResizeWidth="500" Background="Transparent"
prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}">
</avadock:DocumentPane>
在我的代码隐藏中,在Bootstrapping等之后,我有一个地方:
m_RegionManager.Regions[RegionNames.MainTabControlRegion].Add(oneOfMyUserControls);
执行此行不会向用户显示任何更多内容,但如果我执行两次,则会发出错误信息表明视图已经注册(因此它确实添加了一些内容!)。
此外,当我放置一个常规的ContentControl时,用prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}
标记它,然后在其中添加一个UserControl,就像我将它添加到AvalonDock的DocumentPane一样,它可以工作。 怪异
我做错了什么? 谢谢,
BAB。
修改
如果像这样定义MainTabControlRegion,第一个视图实际上被添加,现在id我添加另一个(不同的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>
我希望每次添加usercontrol并将其插入其中时都会创建一个新标签。
编辑2:解决方案 - &gt; Here
答案 0 :(得分:2)
这个问题可能由多种原因引起。
或者RegionAdapter不适合您尝试添加的用户控件,因此我建议您查看RegionAdapter implementation,这样您就可以很好地了解它如何适应您的视图区域并根据您的需求进行定制。
或者您要添加的用户控件具有特定行为,并且在尝试将您的视图添加到DocumentPane项时会阻止RegionAdapter。因此,您可以自定义RegionAdapter或修复用户控件行为。
或者它只是一个数据绑定问题。在第一次执行时没有出现的事实有点奇怪。尝试使用WPF Inspector检查DocumentPane属性绑定。在处理自定义RegionAdapters时,它不止一次地挽救了我的生命。