如何在WPF中创建模板窗口?

所以我正在构建一个具有大量窗口的应用程序,所有窗口都具有相同的基本布局:

  1. 主窗口
  2. 顶角有一个标志
  3. 标题栏
  4. 底部的状态显示器
  5. 窗口特定控件的区域。

目前我必须在每个窗口重新创建这个结构。 理想情况下,我希望将这种布局编码在一个地方,也许是为了便于使用,可能是自定义的Window子类。 有没有人有任何关于如何开始或以前遇到类似问题的经验的线索?

您可以创建一个新的ControlTemplate,以窗口为目标来完成此操作,如下所示。

                             

如果你有足够的勇气进行大规模的架构转变,你可以考虑来自微软的模式和实践人员的CompositeWPF (以前代号为Prism)。

您感兴趣的是能够在shell(即窗口)中定义“区域”,然后使用视图填充区域。 它使用Model-View-Presenter模式允许从模型中独立开发“视图”,而不是随着时间的推移可以轻松地重新定位,因为shell仅定义区域并且不直接耦合到放置在其中的内容。 原则上这有助于将shell与视图和视图相互分离,并使unit testing变得更容易……等等,等等。

尽管您的情况是CompositeWPF要解决的应用程序类型之一,但这是一个很大的跳跃,会让您慢慢开始。

作为CompositeWPF的一部分,您需要采用可能使新手混淆的各种模式,例如UnityContainer,控制反转,MVP(或模型/视图/视图模型)和dependency injection。

我记得当我第一次开始使用示例应用程序时感到困惑,因为一些视图甚至在创建之前是不是很明显! 统一容器将实例化对象并神奇地调用参数化构造函数。

CompositeWPF是您问题的优雅解决方案,但不是简单或直接的解决方案。 在我的上一个项目中使用了CompositeWPF后,我打算再次将它用于下一个适当的应用程序。

最简单的方法是为窗口特定控件创建WPF“页面”,并在主窗口中放置“框架”。 你甚至可以用这种方式创建一个很好的导航。

为什么你正在使用“很多窗户?” 为什么不只是一个带有标签控件的窗口? 或者一个带有用户控件的窗口?

无论如何,要回答您的问题,usercontrols是您希望获得您想要的function的一种方式。

创建一个新的Window类,并让它具有“Childrens”属性,允许将对象嵌入到您想要“窗口特定控件”的停靠面板中。

在启动新窗口时,实例化窗口类型和具有特定控件的用户控件,将用户控件添加到窗口的Children属性,然后显示窗口。 你甚至可以绑定事件处理程序,DataContexts以及目前还没有的东西。