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();
        }        
    }

 

 

 

posted @ 2019-11-12 16:54  清风随心走  阅读(1355)  评论(0)    收藏  举报