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 窗口位置的主要内容,如果未能解决你的问题,请参考以下文章

WPF 窗口位置

更改WPF窗口的启动位置

WPF - 设置相对于用户控件的对话框窗口位置

WPF 窗口位置绑定

如何在鼠标位置打开具有 Windows 窗体父级的 WPF 窗口?

将 XAML 中 WPF 窗口的启动位置更改为右下角