MDI子窗体在winform和wpf中的应用
一、MDI子窗体在winform中的应用
第一步:设置父窗体的IsMdiContainer属性为true

第二步:创建子窗体
private void NewFile() { DuanBanGZNodeForm docForm = new DuanBanGZNodeForm(); docForm.TopLevel = false;//将子窗体设置成非顶级控件 //// docForm.FormBorderStyle = FormBorderStyle.None;//去掉子窗体边框 //docForm.Parent = this.panel1;//指定子窗体显示的容器 //docForm.Dock = DockStyle.Fill;//设置子窗体随容器大小自动调整 // docForm.Show(); docForm.MdiParent = this; docForm.WindowState = FormWindowState.Maximized; docForm.Show(); }
二、MDI子窗体在wpf中的应用
第一步:添加对WPF.MDI库的引用
第二步:在父窗体中添加mdi容器
<Window x:Class="TongMSKJieDian.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:TongMSKJieDian" xmlns:mdi="clr-namespace:WPF.MDI;assembly=WPF.MDI" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525" WindowState="Maximized" Closing="Window_Closing"> <Grid> <DockPanel> <!--停靠布局,让菜单栏和工具栏位于窗口顶部--> <mdi:MdiContainer Name="Container"> <mdi:MdiContainer.Menu> <Menu DockPanel.Dock="Top"> <MenuItem Header="文件"> <!--菜单项为MenuItem,文字使用属性 Header--> <MenuItem Name="newFile" Header="新建" Click="newFile_Click" ></MenuItem> </MenuItem> <MenuItem Header="节点"></MenuItem> <MenuItem Header="窗口" x:Name="WindowsMenu" x:FieldModifier="private" /> <MenuItem Header="关于"></MenuItem> </Menu> </mdi:MdiContainer.Menu> </mdi:MdiContainer> </DockPanel> </Grid> </Window>
后台完整代码
public partial class MainWindow : Window { string _original_title; public MainWindow() { InitializeComponent(); _original_title= this.Title; Container.Children.CollectionChanged += (o, e) => Menu_RefreshWindows(); Container.MdiChildTitleChanged += Container_MdiChildTitleChanged; } private void newFile_Click(object sender, RoutedEventArgs e) { string DWGFileName = @"C:\Users\Administrator\Desktop\节点计算\资料\20191022端板式宽钢管混凝土柱节点计算书\20191022端板式宽钢管混凝土柱节点.dwg"; DuanBanGZNodeForm duanbanNode = new DuanBanGZNodeForm(DWGFileName); MdiChild mdiC = new MdiChild { Content = duanbanNode, Title = "端板节点" }; Container.Children.Add(mdiC); // mdiC.WindowState = WindowState.Maximized; } void Container_MdiChildTitleChanged(object sender, RoutedEventArgs e) { if (Container.ActiveMdiChild != null && Container.ActiveMdiChild.WindowState == WindowState.Maximized) Title = _original_title + " - [" + Container.ActiveMdiChild.Title + "]"; else Title = _original_title; } void Menu_RefreshWindows() { WindowsMenu.Items.Clear(); MenuItem mi; for (int i = 0; i < Container.Children.Count; i++) { MdiChild child = Container.Children[i]; mi = new MenuItem { Header = child.Title }; mi.Click += (o, e) => child.Focus(); WindowsMenu.Items.Add(mi); } WindowsMenu.Items.Add(new Separator()); WindowsMenu.Items.Add(mi = new MenuItem { Header = "级联" }); mi.Click += (o, e) => Container.MdiLayout = MdiLayout.Cascade; WindowsMenu.Items.Add(mi = new MenuItem { Header = "水平" }); mi.Click += (o, e) => Container.MdiLayout = MdiLayout.TileHorizontal; WindowsMenu.Items.Add(mi = new MenuItem { Header = "垂直" }); mi.Click += (o, e) => Container.MdiLayout = MdiLayout.TileVertical; WindowsMenu.Items.Add(new Separator()); WindowsMenu.Items.Add(mi = new MenuItem { Header = "关闭所有" }); mi.Click += (o, e) => Container.Children.Clear(); } }

浙公网安备 33010602011771号