更改WPF窗口的启动位置

Eva*_*van 43 wpf window wpf-positioning

我想在屏幕的右上角打开一个WPF窗口.

现在我可以通过打开窗口然后移动它来实现(通过user32.dll中的movewindow).但是,这种方法意味着窗口在其默认位置打开,完全加载,然后移动到右上角.

我怎么能改变它以便我可以指定窗口的初始位置和大小?

Ree*_*sey 98

只需在xaml中设置WindowStartupLocation,Height,Width,Left和Top:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" 
    Height="500" Width="500"
    WindowStartupLocation="Manual" 
    Left="0" Top="0">
</Window>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!!我知道它必须很简单,但我当然尝试找到复杂的解决方案:)。 (2认同)
  • 伟大的!这就是我正在寻找的`win.WindowStartupLocation = `[WindowStartupLocation](https://msdn.microsoft.com/en-us/library/system.windows.windowstartuplocation(v=vs.110).aspx)`。中心屏幕;` (2认同)

Chr*_*son 6

对于像我这样想将窗口的位置设置为当前鼠标位置的人,可以这样做:

myWindow.WindowStartupLocation = WindowStartupLocation.Manual;
myWindow.Left = PointToScreen(Mouse.GetPosition(null)).X;
myWindow.Top = PointToScreen(Mouse.GetPosition(null)).Y;
Run Code Online (Sandbox Code Playgroud)


noe*_*cus 5

我喜欢使用WindowStartupLocation="CenterOwner"MSDN 文档

调用者需要将自己指定为所有者才能正常工作,例如:

new MyWindow() { Owner = this }.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

然后只需定义窗口高度和宽度,例如:

<Window ...
     Height="400" Width="600"
     WindowStartupLocation="CenterOwner"
>
...
Run Code Online (Sandbox Code Playgroud)