WPF 窗口位置
Posted
技术标签:
【中文标题】WPF 窗口位置【英文标题】:WPF Window Location 【发布时间】:2012-02-22 05:57:06 【问题描述】:我正在尝试在主显示器的右下角启动一个窗口(因为它肯定会在多显示器系统上使用)。到目前为止,我已经让它工作了,但是窗口首先在屏幕中间的某个地方闪烁了一秒钟,然后移动到正确的位置。这是我得到的:
public MyWindow()
InitializeComponent();
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
var workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice;
var corner = transform.Transform(new Point(workingArea.Right, workingArea.Bottom));
this.Left = corner.X - this.ActualWidth;
this.Top = corner.Y - this.ActualHeight;
));
我尝试了一些显而易见的方法,例如隐藏窗口,然后在移动完成后再次显示它,但这似乎也不起作用,因为它根本不显示窗口。
我知道这是一个很小的问题,但奇怪的是它很烦人,我很想解决它!
【问题讨论】:
您好,我知道您可能早先想到了这一点,但希望这能有所帮助。您说您已经使用上面发布的代码实现了这一点,为什么不尝试将窗口的默认可见性设置为折叠,然后在执行代码后将其设置为可见。 出于某种原因,当我这样做时,窗口从未出现过。可能是因为我把 Visibility = Visibility.Visible 放在了错误的地方,但无论哪种方式,它都感觉很糟糕 :) 是的,感觉有点棘手 :) 无论如何,恭喜你在没有我肮脏的想法的情况下解决了这个问题 :) lolz 【参考方案1】:在 Window.Loaded 事件处理程序中设置窗口位置:
public MainWindow()
InitializeComponent();
Loaded += (o, e) =>
var workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice;
var corner = transform.Transform(new Point(workingArea.Right, workingArea.Bottom));
this.Left = corner.X - this.ActualWidth;
this.Top = corner.Y - this.ActualHeight;
;
【讨论】:
以上是关于WPF 窗口位置的主要内容,如果未能解决你的问题,请参考以下文章