Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态创建选项卡并在其中插入视图_C#_Wpf_Prism_Avalondock_Regionadapter - Fatal编程技术网

C# 动态创建选项卡并在其中插入视图

C# 动态创建选项卡并在其中插入视图,c#,wpf,prism,avalondock,regionadapter,C#,Wpf,Prism,Avalondock,Regionadapter,我使用AvalonDock拥有一种类似vs的停靠方式,并使用prism在我的应用程序中注入视图。 基本上,用户将在侧面有一个面板,每个视图可加载一个按钮,每次他按下一个按钮时,我想在我的AvalonDock的DocumentPane上创建一个新选项卡,并在其中插入正确的视图 现在我的印象是prism适合这种场景,但我无法理解。 另外,我偶然发现了accross,将它添加到我的项目中,并在引导程序中注册了映射 这允许我编译解决方案(因此我猜我已经接近了)。 到目前为止,我是这样做的: 在我的She

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

现在我的印象是prism适合这种场景,但我无法理解。

另外,我偶然发现了accross,将它添加到我的项目中,并在引导程序中注册了映射
这允许我编译解决方案(因此我猜我已经接近了)。

到目前为止,我是这样做的:

在我的
Shell
中,我有一个位置:

<avadock:DocumentPane avadock:ResizingPanel.ResizeWidth="500" Background="Transparent"
                      prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}">
</avadock:DocumentPane>
执行这一行不会向用户显示更多内容,但如果我执行两次,它将出错,表示视图已注册(因此它确实添加了一些内容!)

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

我做错了什么?
谢谢

巴布

编辑:
如果像这样定义MainTabControlRegion,第一个视图实际上会被添加,现在我添加了另一个视图(不同的UserControl),它不会显示,但是WPF Inspector说它在那里。
在我看来,它确实是在向区域添加UserControl,但它不知道如何为添加到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>

此问题可能是由多种原因造成的

或者RegionaAdapter不太适合您尝试添加的用户控件,因此我建议您查看一下,以便您能够很好地了解它如何调整您在该区域的视图,并对其进行自定义以满足您的需要

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


或者这只是一个数据绑定问题。第一次执行时没有显示任何内容这一事实有点奇怪。请尝试使用检查DocumentPane属性绑定。在处理自定义区域适配器时,它不止一次地救了我的命。

您能告诉我们一个MyUserControl的类型吗?它是一个UserControl,我有40多个不同的控件这些…我在代码中的其他地方解析了正确的对象,但我认为这与问题无关,它们都是用户控件,在这个场景之外可以正常工作。我现在正在尝试inspector,我会让您知道在您给出的第二个示例中,它完全正常,因为您正在向内容添加视图控件和Prism提供的ContentControl的默认RegionAdapter是一个单一活动区域,一次只接受一个活动视图(请参见SingleActiveRegion类)。对于ContentControl来说完全有意义。您可能不想插手,但了解RegionAdapter的工作原理将使您更好地了解Prism region功能。您是否有指向DocumentPaneRegionAdapter的链接,以便我可以查看它?
<avadock:DocumentPane avadock:ResizingPanel.ResizeWidth="500" Background="Transparent">
    <avadock:DocumentContent Title="" prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}">

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