【发布时间】:2011-07-22 18:50:10
【问题描述】:
我有一个带有菜单栏和状态栏的主 WPF 窗口。我希望这个窗口充当 MDI 窗口。我想定义从菜单栏下方到状态栏上方的整个区域,我将在其中显示其他窗口。我想定义一个页面或面板之类的东西。当我添加一个新的 WPF 表单时,我希望它出现在主窗口中包含的这个位置上。如何做到这一点?
【问题讨论】:
标签: wpf
我有一个带有菜单栏和状态栏的主 WPF 窗口。我希望这个窗口充当 MDI 窗口。我想定义从菜单栏下方到状态栏上方的整个区域,我将在其中显示其他窗口。我想定义一个页面或面板之类的东西。当我添加一个新的 WPF 表单时,我希望它出现在主窗口中包含的这个位置上。如何做到这一点?
【问题讨论】:
标签: wpf
我在基本原型应用程序中使用过http://wpfmdi.codeplex.com/。将您的内容创建为用户控件,然后将其包装在一个窗口中。
不过,我从未在工具箱中使用过它。
【讨论】:
简单版:
<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 中子项的顺序。
【讨论】: