WPF中MDI应用程序的最佳方法?

时间:2012-04-27 20:42:53

标签: c# wpf xaml mdi

我正在为商店开发WPF应用程序。

所以我有一个MainWindow,其余的都是Child。

哪个用作儿童窗口最好。

  1. 窗口
  2. 用户控件
  3. 窗口是正常的,它将是MainWindow的顶部,如果它的UserControl它将在MainWindow的Canvas中。

    所以任何人都可以建议我最好使用这两个。

6 个答案:

答案 0 :(得分:6)

我建议您为子窗口使用UserControls。这允许您在主窗口上设置所有“父”控件,子控件不会覆盖它们。

作为进一步的建议,我建议调查Caliburn Micro。这是处理WPF窗口和用户控件的一个很好的框架。

要将子UserControl添加到父窗口,我通常只需将ContentControl添加到我的主窗体中,如下所示:

<ContentControl x:Name="ViewWindow" Margin="10" />

只需将您的孩子分配给该控件,您就可以了。

答案 1 :(得分:4)

我建议使用像AvalonDock这样的MDI框架:http://avalondock.codeplex.com/ 你会节省很多时间。

答案 2 :(得分:2)

像生活中的许多事情一样编码:取决于:)

  • 窗口

    • 当新窗口有自己的状态&amp;行为
    • 当主窗口和主窗口之间几乎没有交互/消息传递时弹出窗口
  • 用户控制

    • 当底层主窗口的状态对于弹出窗口的操作至关重要时
    • 当需要在2个窗口之间传递状态更改时

这些是我想到的一些设计决定......

答案 3 :(得分:2)

请参阅网站:http://wpfmdi.codeplex.com/

答案 4 :(得分:1)

当您决定使用父子窗口交互时,子窗口对于桌面应用程序非常有用,尽管我个人建议您在主窗口中使用框架并使用它来托管多个页面。

要了解有关WPF和silverlight导航的更多信息,您可以访问this link

使用此方法将有助于您获得以下优势:

  1. 由于未连接的事件处理程序导致内存泄漏的可能性较小。
  2. 可以在不指示子窗口样式的情况下实现一致的设计,因为您可以将页面背景设置为透明。
  3. 当其他程序与您正在构建的软件同时使用时,用户不会很难找到哪个窗口具有焦点。
  4. 我也认为在构建这个软件时你也可以考虑一些东西,但最终你还是应该决定这个问题的人。

    这只是我的建议,希望这会有所帮助:)。

答案 5 :(得分:1)

考虑检查MDIContainer。与MDI for WPF类似的项目,但它为您提供了更多的自由,因为它不会强制您实现MDIChild窗口,界面或任何东西。