【问题标题】:Keeping page code in separate files将页面代码保存在单独的文件中
【发布时间】:2011-07-22 18:50:10
【问题描述】:

我有一个带有菜单栏和状态栏的主 WPF 窗口。我希望这个窗口充当 MDI 窗口。我想定义从菜单栏下方到状态栏上方的整个区域,我将在其中显示其他窗口。我想定义一个页面或面板之类的东西。当我添加一个新的 WPF 表单时,我希望它出现在主窗口中包含的这个位置上。如何做到这一点?

【问题讨论】:

    标签: wpf


    【解决方案1】:

    我在基本原型应用程序中使用过http://wpfmdi.codeplex.com/。将您的内容创建为用户控件,然后将其包装在一个窗口中。

    不过,我从未在工具箱中使用过它。

    【讨论】:

      【解决方案2】:

      简单版:

          <Window x:Class="WpfApplication1.MainWindow"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              Title="MainWindow" Height="350" Width="525">
          <DockPanel>
              <Menu DockPanel.Dock="Top">
                  <MenuItem Header="File"/>
                  <MenuItem Header="Edit"/>
                  <MenuItem Header="Help"/>
              </Menu>
              <StatusBar DockPanel.Dock="Bottom"/>
              <ContentControl Name="_content"/>
          </DockPanel>
      </Window>
      

      还有代码隐藏:

      public partial class MainWindow : Window
      {
          public MainWindow()
          {
              InitializeComponent();
          }
          public object MainContentGoesHere
          {
              get { return _content.Content; }
              set { _content.Content = value; }
          }
      }
      

      然后在您的代码中只引用 MainWindow - 并使用 MainContentGoesHere 属性注入视图。当您注入它们时,请记住使用 UserControls、Panels 或 ContentControl 而不是 Window,因为 Window 不能有父级。

      如果您想要更花哨的东西,请查看 CodePlex 上的 Prism。这对你来说可能有点矫枉过正,但它实际上是一个经过深思熟虑的轻量级框架。

      编辑:修复了 DockPanel 中子项的顺序。

      【讨论】:

      • 在 WPF 中没有 MDI 不是开销吗?一个商业应用程序。没有 MDI 就无法考虑。 WPF 看起来像是爱好者的玩具。
      • 呃……嗯? WPF 是一个成熟的 UI 平台...我可以在 WinForm 应用程序周围运行...他们只是有不同的方式来实现 MDI。
      • 我可以在内容区添加页面吗?
      • 是的,如果它是 Window 的唯一子级(页面只能有 Window 或 Frame 作为父级)...因此,对于我的示例,您必须将 DockPanel 放在 PAge 内。
      • 我添加了一个新页面,但是当我尝试通过工具箱删除控件时,工具箱被禁用。
      猜你喜欢
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 2019-08-19
      相关资源
      最近更新 更多