Изменение места запуска окна WPF - PullRequest
42 голосов
/ 09 октября 2009

Я хотел бы открыть окно WPF в верхней правой части экрана.

Прямо сейчас я могу добиться этого, открыв окно, а затем переместив его (через movewindow в user32.dll). Однако этот подход означает, что окно открывается в расположении по умолчанию, полностью загружается и затем перемещается в верхний правый угол.

Как я могу изменить его, чтобы я мог указать начальную позицию и размер окна?

Ответы [ 5 ]

93 голосов
/ 09 октября 2009

Просто установите WindowStartupLocation, Высота, Ширина, Слева и Верх в xaml:

<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>
2 голосов
/ 27 октября 2018

Для людей, которым, как я, хотелось установить положение окна на текущую позицию мыши, вы можете сделать это следующим образом:

myWindow.WindowStartupLocation = WindowStartupLocation.Manual;
myWindow.Left = PointToScreen(Mouse.GetPosition(null)).X;
myWindow.Top = PointToScreen(Mouse.GetPosition(null)).Y;
2 голосов
/ 05 июля 2018

Мне нравится использовать WindowStartupLocation="CenterOwner" ( MSDN документы для него )

Чтобы это работало, вызывающему абоненту необходимо указать себя как владельца, например:

new MyWindow() { Owner = this }.ShowDialog();

Затем просто определите высоту и ширину окна, например:

<Window ...
     Height="400" Width="600"
     WindowStartupLocation="CenterOwner"
>
...
0 голосов
/ 25 апреля 2019

Вот что у меня сработало (с другим размещением на экране):

<Window x:Class="BtnConfig.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BtnConfig"
        mc:Ignorable="d"
        Title="MainWindow" Height="142.802" Width="448.089"
        Top="288" Left="0"> 
</Window>

Обратите внимание, что оно не содержит:

WindowStartupLocation="Manual" 
0 голосов
/ 11 сентября 2018

Существует свойство для Window, которое называется "WindowStartupLocation" Вы можете найти это в окне свойств. Просто выберите Window в конструкторе, а затем перейдите к списку свойств. Ищите "Startup" или что-то подобное, и вы можете найти это свойство. Измените его на "CenterScreen", и он совершит сделку. НОТА! Убедитесь, что вы не выбрали сетку вместо окна! В противном случае у вас ничего не получится.

Или вы можете сделать это через редактирование XAML, как некоторые парни писали ранее.

...