我用c#的wpf做了一个等待的窗口,等待窗口想定位到父窗口的中间,总是计算不出位置
我用wpf做了个等待窗口,而且在线程启动的此窗口(此处安全及规范都已处理),因父窗口是winform做的,所以WindowStaruptLoacation=父窗口的中间,...
我用wpf做了个等待窗口,而且在线程启动的此窗口(此处安全及规范都已处理),因父窗口是winform做的,所以WindowStaruptLoacation=父窗口的中间,并不好用,所以无奈只得自己计算父窗口坐标,并设置 wpf做的等待窗口 的坐标位置,可是总是定位不准确,我已经将代码简化了下,如下
wwd.Top =f.Location.Y;//wwd就是 wpf做的等待窗口 ,f既是父窗口
wwd.Left =f.Location.X;
wwd.ShowDialog();
我发现,随着父窗口的移动,wwd(等待窗口)并不会出现在正确的位置,(按上面代码的位置,理论上一直是在父窗口的左上角,但实际情况并不是这样,如父窗口向右移动,wwd会随着父窗口移动,逐渐向右偏离左上角),不知道是不是我的调用的方式不对? 展开
wwd.Top =f.Location.Y;//wwd就是 wpf做的等待窗口 ,f既是父窗口
wwd.Left =f.Location.X;
wwd.ShowDialog();
我发现,随着父窗口的移动,wwd(等待窗口)并不会出现在正确的位置,(按上面代码的位置,理论上一直是在父窗口的左上角,但实际情况并不是这样,如父窗口向右移动,wwd会随着父窗口移动,逐渐向右偏离左上角),不知道是不是我的调用的方式不对? 展开
展开全部
你的代码的确会出现你所讲的现象。f.Location.Y 与 f.Location.X 是父窗口在显示器的位置,而不是你所期望的 (0,0)坐标;wwd.Top与wwd.Left是它在父窗口的位置,你移动父窗口的话,wwd窗口当然会改变位置,你要wwd在父窗口的中间可用如下代码:
wwd.Left = (f.Width - wwd.Width) / 2;
wwd.Top = (f.Height - wwd.Height) / 2;
wwd.Left = (f.Width - wwd.Width) / 2;
wwd.Top = (f.Height - wwd.Height) / 2;
更多追问追答
追问
wwd.left和top是屏幕坐标不是客户区的坐标,我做的这个wpf窗口只能根据主窗口在屏幕的位置定位,所以我的源代码其实是这样的
wwd.Top =(this.f.Height - (wwd.grid.Height + titleHeight)) / 2+f.Location.Y;
不过除 f.Location.Y和 f.Location.X是变化的,其他是固定的,所以被省去了
追答
你不是 说父窗口吗?是做MDI吧?假如是做成独立窗口,窗口本身有一个显示属性设置在屏幕居中,这个与其它窗口没有任何关系。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询