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?

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


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


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?


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?


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


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.


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;

0

Prefiro colocá-lo no código WPF.

No [WindowName].xamlarquivo:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.