1

我正在开发一堆用户控件来做不同的事情——比如维护屏幕、查询屏幕、报告屏幕之类的东西。每个屏幕都有一个专门的用途,一个用户控件拥有一个屏幕的所有功能。

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

这一切都很好。

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

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

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

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

这是我卡住的地方,需要一些指导。

我在想我可能需要某种 shell 应用程序,我可以在其中传递我想要的用户控件。shell 将充当带有标题、X、最小化等的窗口;用户控件将成为该外壳的唯一内容。使用 process.start 创建新进程并启动?

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

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

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

4

1 回答 1

2

无需为该场景启动新流程。

只需在运行时创建一个新的Window添加UserControl并从DockingManager. 如果您希望它显示在那里,请确保WindowShowInTaskbar设置。

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

于 2012-10-16T09:05:00.777 回答