WPF父窗口与子窗口的关系之——窗口层次关系及其上下位置分布

关于子窗体的层级关系总结一下哈,希望能对大家有些帮助

假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow

 

1,如果弹出窗体(比如SubWindow)仅仅是调用Show方法,并且没有设置其Owner属性:

ClassRootWindow
{
        void Foo()
        {
                   SubWindow sw = newSubWindow();
                   sw.Show();
        }
}
那么弹出窗体(SubWindow)和源窗体(如RootWindow)没有任何层级关系,也就是说不会以模态方式呈现(SubWindow不会阻挡用户对RootWindow的操作)。SubWindow在Show出来时在RootWindow的上方,但用户可以通过鼠标点击等方式将RootWindow带到SubWindow前方来而遮盖RootWindow的内容,也就是说,享有用户焦点的窗口将被带到最前方。并且RootWindow和SubWindow的最小化与还原操作互不影响。

 

2,如果弹出窗体(比如SubWindow)调用Show方法,并且设置了其Owner属性:

ClassRootWindow
{
        void Foo()
        {
                   SubWindow sw = newSubWindow();
                  sw.Owner = this;
                   sw.Show();
        }
}

那么弹出窗体(SubWindow)和源窗体(如RootWindow)将有着父子关系,也就是说,弹出窗体将永远在源窗体的上方,但并不是模式的,用户可以操作源窗体,当源窗体被最小化或还原的时候,弹出窗体也将随着最小化和还原,反之不成立。

3,如果弹出窗体(SubWindow)以ShowDialog的方式显示,并且没有设置其Owner属性:
ClassRootWindow
{
voidFoo()
{
          SubWindow sw = new SubWindow();
          sw.ShowDialog();
}
}
弹出窗体将以模式的方式出现,但没有父子关系,弹出窗体将阻止用户对源窗体的操作,但点击源窗体时弹出窗体不会出现闪动效果。弹出窗体最小化时,源窗体会随之最小化,但还原操作却不可以(很奇怪)。这里有一个值得注意的问题是:在此模式下,如果弹出窗体不在任务栏显示(ShowInTaskBar==false),而源窗体显示在任务栏,用户的操作可能会导致弹出窗口被隐藏在源窗口背后而没办法切换出来(除非使用Alt+TAB)。

4,如果弹出窗体(SubWindow)以ShowDialog的方式显示,并且设置了其Owner属性:
Class RootWindow
{
                 void Foo()
                 {
                         SubWindow sw = newSubWindow();
                           sw.Owner = this;
                           sw.ShowDialog();


}

弹出窗体将以模式的方式出现,并且有父子关系,弹出窗体将永远处于源窗体上方,弹出窗体将阻止用户对源窗体的操作,并且点击源窗体时弹出窗体会出现闪动效果。弹出窗体最小化或还原时,源窗体会随之最小化或还原。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF中,要传递子窗口的参数,我们可以通过构造函数、属性或方法来实现。下面是三种不同的方法: 1. 构造函数:在子窗口的构造函数中定义参数,并在打开子窗口时传递参数值。比如: ```csharp public partial class ChildWindow : Window { public ChildWindow(string parameter) { InitializeComponent(); // 使用参数值进行相应操作 } } ``` 在打开子窗口时,通过构造函数传递参数: ```csharp ChildWindow childWindow = new ChildWindow("参数值"); childWindow.Show(); ``` 2. 属性:在子窗口中定义公共属性,然后在打开子窗口后设置属性值。比如: ```csharp public partial class ChildWindow : Window { public string Parameter { get; set; } // 其他操作 } ``` 在打开子窗口后,设置属性值: ```csharp ChildWindow childWindow = new ChildWindow(); childWindow.Parameter = "参数值"; childWindow.Show(); ``` 3. 方法:在子窗口中定义公共方法,用于接收参数值。比如: ```csharp public partial class ChildWindow : Window { public void SetParameter(string parameter) { // 使用参数值进行相应操作 } // 其他操作 } ``` 在打开子窗口后,调用方法传递参数: ```csharp ChildWindow childWindow = new ChildWindow(); childWindow.SetParameter("参数值"); childWindow.Show(); ``` 通过以上三种方法,我们可以成功地在WPF中传递子窗口的参数。根据具体的需求和场景,选择不同的方法来完成参数传递。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值