【问题标题】:What is the best approach to create MDI pop-up windows in WPF?在 WPF 中创建 MDI 弹出窗口的最佳方法是什么?
【发布时间】:2009-05-07 21:52:18
【问题描述】:

我需要创建一个原型来测试 WPF 执行以下操作的能力:

  • 一个基本窗口作为应用程序的基础
  • 在此窗口中,用户可以单击(例如,单击“添加客户”)并弹出一个新窗口
    • 弹窗亮了
    • 背景中的主窗口变暗
  • 如果用户点击主窗口
    • 主窗口变亮
    • 弹出窗口变暗并进入后台
  • 一个窗口中的任何更改都需要立即在所有窗口中生效,无论是明亮的还是暗淡的

问题:

  1. 子窗口应该是用户控件还是窗口?
  2. 有没有我可以利用的“MDI 框架”
  3. 有什么特别需要考虑的,以确保所有窗口都不断更新,例如使用 ObservableCollections 等?
  4. 是否应该将所有全局变量作为属性存储在主窗口中,以便子窗口可以访问它们?
  5. 如何在 WPF 中“使窗口变暗”或“使窗口模糊”?

欢迎任何建议。

【问题讨论】:

    标签: wpf software-design


    【解决方案1】:
    1. 子窗口应派生自 Window,然后在您的类的实例上调用 Show() 以显示无模式对话框。
    2. 据我所知没有。
    3. 使用 WPF 数据绑定使所有内容保持最新 - 您的数据类应该实现 INotifyPropertyChanged 并像您所说的那样通过 ObservableCollection 公开集合。主窗口和弹出窗口应该具有相同的 DataContext 对象,这样如果一个屏幕更改对象的属性,另一个屏幕将自动更新。
    4. 使用模型视图 - 视图模型模式来保持数据和 UI 清晰分离。试试这个工具包: http://blogs.msdn.com/ivo_manolov/archive/2009/05/03/9584900.aspx
    5. 没有真正的“dim”功能,但您可以执行以下操作:

    代码:

    <Window>
      <Grid x:Name="dimElement">
        <Grid Background="Gray" Opacity="0.5" Visibility="Collapsed"/>
        <Grid>
          main content goes here
        </Grid>
       </Grid>
    </Window>
    

    当您想要使窗口变暗时,请将 dimElement 上的 Visibility 设置为“Visible”并将其设置为“Collapsed”以根据需要取消变暗。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 2021-08-30
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多