Como centralizar um aplicativo WPF na tela?

110

Quero centralizar meu aplicativo WPF na inicialização na tela principal. Eu sei que tenho que definir myWindow.Left e myWindow.Top, mas onde obtenho os valores?

Eu encontrei System.Windows.Forms.Screen.PrimaryScreen, o que aparentemente não é WPF. Existe uma alternativa WPF que me dá a resolução da tela ou algo parecido?

Marcel B
fonte

Respostas:

143

Coloque isso no seu construtor de janela

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework com suporte em: 4, 3.5, 3.0

.NET Framework Client Profile Compatível com: 4, 3.5 SP1

Indy9000
fonte
2
Funcionou para mim (.NET 4) e também gosto WindowStartupLocation.CenterOwnerde algumas janelas filho
Stonetip
O padrão é Manual. Ref: msdn.microsoft.com/en-us/library/…
CJBS
158

xaml

WindowStartupLocation="CenterScreen"
Pratik Deoghare
fonte
12
Eu prefiro usar WPF xaml. Obrigado! ;-)
James
1
Tão simples como isso!
Jim
1
Adicionado à tag <Window> e funciona perfeitamente :)
Junaid Khan
49

Você ainda pode usar a classe Screen de um aplicativo WPF. Você só precisa fazer referência ao assembly System.Windows.Forms do seu aplicativo. Depois de fazer isso, (e referenciado System.Drawing para o exemplo abaixo):

Rectangle workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;

... funciona muito bem.

Você já pensou em definir a propriedade WindowStartupLocation da janela principal como CenterScreen?

Michael Petrotta
fonte
1
oh ... eu não conhecia aquele. Obrigado.
Marcel B
1
Eu estava procurando por WindowStartupLocation; sabia que já tinha visto isso antes, muito útil!
chocojosh,
@Michael Petrotta Obrigado. Devo examinar as propriedades com mais frequência.
meffordm
8

E sobre a classe SystemParameters em PresentationFramework? Possui uma propriedade WorkArea que parece ser o que você procura.

Mas, por que a configuração de Window.WindowStartupLocation não funciona? CenterScreen é um dos valores enum. Você precisa ajustar a centralização?

Eddie Butt
fonte
Ótima descoberta :) O problema com a tela central, pelo menos para mim, é que minha janela de Log in é pequena e se o usuário clicar em navegar enquanto o aplicativo está abrindo, muitas vezes passa despercebido e fica em segundo plano. Mas se eu puder abri-lo no visor principal no centro, ele funcionará bem. observação: a maioria dos usuários tem mais de 4 telas
Michal Ciechan
Mais de 4 telas, conte comigo!
user7116
7

Você não precisa fazer referência ao System.Windows.Formsassembly de seu aplicativo. Em vez disso, você pode usar System.Windows.SystemParameters.WorkArea. Isso é equivalente ao System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!

Mimi
fonte
2

Não há equivalente WPF. System.Windows.Forms.Screenainda faz parte do .NET framework e pode ser usado a partir do WPF.

Vejo esta pergunta para obter mais detalhes, mas você pode usar as chamadas relacionadas às telas usando a WindowInteropHelperclasse para quebrar seu controle WPF.

Jeff Yates
fonte
2
var window = new MyWindow();

para centro da tela, use:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

para o centro da janela principal, use:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
Artem
fonte
0

Prefiro colocá-lo no código WPF.

No [WindowName].xamlarquivo:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Jason Robinson
fonte