我需要在面板中添加一个Window控件。
当然这看起来是不可能的:窗必须是树的根。不能将Window添加为Visual的子元素。
问题归结为使用用户配置的操作系统主题在面板内绘制窗口Chrome(控制框,标题栏,最小化/恢复/关闭按钮和边框)。有什么变通办法需要我去调查吗?
这就是用户控件的作用——创建可以在多个窗口中重用的控件。重构您的窗口控件,使其只是一个包含单个用户控件的窗口(该用户控件反过来包含您的窗口先前拥有的所有内容)。将用户控件放置在面板中。这个想法是你当前的窗口(你想成为一个子窗口,我们称之为窗口B)看起来像这样:
Window B -> Grid/Panel -> Other Controls
应该是这样的
Window B -> Grid/Panel -> User Control B -> Grid/Panel -> Other Controls
现在其他窗口可以像这样:
Window A -> Grid/Panel -> ... -> Panel -> User Control B
如果你想实现一个类似MDI的界面,你有几个选择——使用标签控件,使用一个可以拖动和/或调整大小的面板,等等。在这种情况下,你会仍然想要一个用户控件,这样它可以很容易地重用在不同的窗口(或面板),你创建,特别是如果你最终不得不创建这些面板编程(例如,如果你打算在运行时动态创建多个实例)。
在这种情况下,您可能需要两个用户控件:一个具有来自其他窗口的所有控件,另一个将充当主窗口中的"窗口"控件。"窗口"控件将具有调整大小,停靠等功能。WPF不支持将窗口创建为控件,或者作为另一个窗口的子窗口(您可以获得的最接近的是将窗口显示为模态对话框)。
由于唯一的答案完全偏离主题,以下是我能想到的最佳答案:创建窗口,将窗口渲染为位图,将位图放在面板内。