web-dev-qa-db-fra.com

Modification de l'emplacement de démarrage d'une fenêtre WPF

Je voudrais avoir une fenêtre WPF ouverte dans la partie supérieure droite de l'écran.

À l'heure actuelle, je peux y parvenir en ouvrant la fenêtre puis en la déplaçant (via movewindow dans user32.dll). Cependant, cette approche signifie que la fenêtre s'ouvre à son emplacement par défaut, se charge entièrement, puis se déplace en haut à droite.

Comment pourrais-je le changer pour pouvoir spécifier la position et la taille initiales de la fenêtre?

42
Evan

Définissez simplement WindowStartupLocation, Hauteur, Largeur, Gauche et Haut dans 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>
93
Reed Copsey

J'aime utiliser WindowStartupLocation="CenterOwner" ( documentation MSDN pour cela )

L'appelant doit se spécifier comme propriétaire pour que cela fonctionne, comme:

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

Ensuite, définissez simplement la hauteur et la largeur de la fenêtre, par exemple:

<Window ...
     Height="400" Width="600"
     WindowStartupLocation="CenterOwner"
>
...
2
noelicus

Pour les personnes qui comme moi voulaient définir la position de la fenêtre sur la position actuelle de la souris, vous pouvez le faire comme ceci:

myWindow.WindowStartupLocation = WindowStartupLocation.Manual;
myWindow.Left = PointToScreen(Mouse.GetPosition(null)).X;
myWindow.Top = PointToScreen(Mouse.GetPosition(null)).Y;
2
Christian Larsson

Il existe une propriété pour Window, appelée "WindowStartupLocation" Vous pouvez le trouver dans la fenêtre des propriétés. Sélectionnez simplement Window dans le constructeur, puis accédez à la liste des propriétés. Rechercher "Startup" ou smth similaire et vous pouvez trouver cette propriété. Remplacez-le par "CenterScreen" et cela fera l'affaire. REMARQUE! Assurez-vous que vous n'avez pas sélectionné la grille au lieu de la fenêtre! Sinon, vous échouerez.

Ou vous pouvez simplement le faire via l'édition XAML comme certains gars l'ont écrit auparavant.

0

C'est ce qui a fonctionné pour moi (avec un placement différent à l'écran):

<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>

Notez qu'il ne contient pas:

WindowStartupLocation="Manual" 
0
Michael Webb