用户控制avalon底座和单独的窗口

时间:2012-10-16 07:56:05

标签: c# wpf user-controls window

我正在开发一堆用户控件,它们可以执行不同的操作 - 例如维护屏幕,查询屏幕,报表屏幕等等。每个屏幕都有一个专用的用途,一个用户控件可以保存一个屏幕的所有功能。

我正在使用avalondock并可以将这些用户控件放入LayoutDocuments中。这为每个屏幕/用户控件创建了一个单独的选项卡。我有一个菜单系统设置,以便用户可以选择他们需要访问的屏幕。对于每个新屏幕,我创建一个新的LayoutDocument,向其添加适当的控件,然后将LayoutDocument添加到Docking面板的子节点。

这一切都正常。

Avalon dock还具有能够拖出布局文档并使其浮动的功能 - 如果您愿意,还可以将其停靠在应用程序中的其他位置。

我想进一步采用这个概念:能够说出右键单击布局文档并选择“制作外部窗口”(我将在稍后制定确切的措辞)。此操作的效果是在任务栏中创建一个带有自己图标的新应用程序;能够在它和其他应用程序之间进行alt选项卡;

有点像当你说Excel编辑文档然后打开第二个excel实例时。在Windows 7中,您可以在任务栏中获得两个excel图标(一个在另一个后面),您可以在它们之间使用alt-tab。

这几乎是我追求的行为。然而,第二个应用程序不是第一个应用程序的完整副本;它只有用户选择的一个用户控件。

这是我被困住的地方,想要一些指导。

我想我可能需要某种shell应用程序,我可以传递我想要的用户控件。 shell将作为一个带有标题X的窗口,最小化等;然后,用户控件将是该shell的唯一内容。使用process.start创建新流程并启动?

理想情况下,我能够以与用户当前查看相同的状态传递相同的控件 - 因此,例如,如果他们在维护屏幕中编辑某些客户记录,那么选择“外部窗口” “选项,相同的客户记录将出现在新窗口中。

如果我走在正确的轨道上,是否有人做过类似的事情或提供建议?

我想我知道如何创建一个shell应用程序,但不确定是否动态地将用户控件传递给它。我想避免为每个用户控件创建不同的shell应用程序。

1 个答案:

答案 0 :(得分:2)

无需针对该方案启动新流程。

只需在运行时创建一个新的Window添加UserControl,然后从DockingManager中删除UserControl。如果您希望Window显示ShowInTaskbar,请确保UserControl已设置。{/ p>

要获取命令以Window作为单独ContextMenu取消停靠,您只需重新设置ContextMenu以合并您的命令(查看VS2010主题以及{ {1}}的样式为VS2010 theme.xaml)。