wpf中子窗口的几个问题

今天研究了一下wpf中的窗口,写这篇文章来总结一下今天的收获。(转载请注明出处~)


总所周知,窗口是windows系统中十分重要的一个元素(从名字上就能体现出来),而一个应用程序总是包含很多窗口(主窗口、子窗口、对话框)。

我们要利用wpf实现一个多窗口的应用。

新建一个wpf项目后,修改xaml如下:

<Window x:Class="WpfApplication3.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">
    <Grid>
        <DockPanel>
            <Menu DockPanel.Dock="Top">
                <MenuItem Header="文件(F)"></MenuItem>
                <MenuItem x:Name="AboutItem" Header="关于(A)"></MenuItem>
            </Menu>
            <TextBox DockPanel.Dock="Bottom"></TextBox>
        </DockPanel>
    </Grid>
</Window>

运行界面如图:
运行界面

新建一个窗口,将title属性设置为“关于”
关于窗口

我们要实现的功能:单击主窗口(MainWindow)菜单栏上的“关于(A)”弹出AboutWindow
需要注意的地方是,弹出的窗口要以对话框的形式,且打开的位置要在主窗口中央

实现:

首先,为“关于(A)”项添加click事件(该项已在xaml里命名为:AboutItem)。视线转移到代码文件里,将处理该事件的代码改为:

private void AboutItem_Click(object sender, RoutedEventArgs e)
        {
            AboutWindow aw = new AboutWindow();
            aw.Show();
        }

执行结果:
第一次执行结果

我们只在事件中添加了两行代码就实现了打开窗口功能,
其中第一行是:AboutWindow aw = new AboutWindow();
这句是将AboutWindow窗口 实例化。
第二行:aw.Show();
就是打开窗口了。

于是,我们兴奋地在两个窗口之间切来切去,却发现我们当初想要的效果并没有实现。
第一点,以对话框的形式。就是新窗口必需关闭才能回到原来的窗口,而不是切来切去的子窗口形式。

实现这一点很简单,只需将将添加的第二行代码改为:
aw.ShowDialog();
然后执行发现,必须关闭AboutWindow窗口才能回到原来的窗口。试想,windows中弹出的对话框是不是就是这样的设置呢?

还有一点没有解决,打开的位置要在主窗口中央。试想,正常程序中是不是打开的窗口在主窗口中央呢?而不是在屏幕左上角(或左下角)

要实现这一点要在原来的代码中再添加两行:

private void AboutItem_Click(object sender, RoutedEventArgs e)
        {
            AboutWindow aw = new AboutWindow();
            aw.Owner = this;//将主窗口设置为AboutWindow的拥有者
            aw.WindowStartupLocation = WindowStartupLocation.CenterOwner;//将AboutWindow的打开的初始位置设置为在Owner的中央
            aw.ShowDialog();

        }

程序运行:
最后的运行结果

至此,两点问题全部解决。


  • 如果要实现主窗口居中,我们可以在属性面板里修改WindowStartupLocation属性为:CenterScreen(不是CenterOwner)

  • 要实现初始打开为最大化,修改WindowState属性为:Maximized


最后:wpf为窗口提供了很丰富的属性,大家可以一一去尝试。希望大家能够发现很多有意思的属性:)

 

posted @ 2015-06-19 22:16  新月的力量_141  阅读(1401)  评论(0编辑  收藏  举报