Bir WPF uygulaması ekranda nasıl ortalanır?


110

WPF uygulamamı başlangıçta birincil ekranda ortalamak istiyorum. MyWindow.Left ve myWindow.Top'u ayarlamam gerektiğini biliyorum, ancak değerleri nereden alabilirim?

System.Windows.Forms.Screen.PrimaryScreenGörünüşe göre WPF olmayan buldum . Bana ekran çözünürlüğünü veya bunun gibi bir şeyi veren bir WPF alternatifi var mı?

Yanıtlar:


143

Bunu pencere yapıcınıza koyun

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework Desteklenen: 4, 3.5, 3.0

.NET Framework İstemci Profili Desteklenen: 4, 3.5 SP1


2
Benim için çalıştı (.NET 4) ve ayrıca WindowStartupLocation.CenterOwnerbazı çocuk pencerelerini de seviyorum
Stonetip

Varsayılan değer Manual. Referans: msdn.microsoft.com/en-us/library/…
CJBS


49

Yine de bir WPF uygulamasından Screen sınıfını kullanabilirsiniz. Uygulamanızdan System.Windows.Forms derlemesine başvurmanız yeterlidir. Bunu yaptıktan sonra (ve aşağıdaki örnek için System.Drawing'e başvurduğunuzda):

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

... gayet iyi çalışıyor.

WindowStartupLocation ana pencere özelliğinizi CenterScreen olarak ayarlamayı düşündünüz mü?


1
oh ... bunu bilmiyordum. Teşekkürler.
Marcel B

1
WindowStartupLocation'ı arıyordum; bunu daha önce gördüğümü biliyordum, çok faydalı!
chocojosh

@Michael Petrotta Teşekkürler. Gayrimenkullere daha sık bakmalıyım.
meffordm

8

PresentationFramework'daki SystemParameters sınıfı ne olacak? Bu bir var workareaAradığınız gibi görünen özelliğine sahiptir.

Ama Window.WindowStartupLocation neden çalışmıyor? CenterScreen, enum değerlerinden biridir. Merkezlemeyi ayarlamanız gerekiyor mu?


Harika bul :) En azından benim için orta ekranla ilgili sorun şu ki, Oturum aç pencerem küçük ve kullanıcı uygulama açılırken tıklarsa, genellikle fark edilmiyor ve arka plana giriyor. Ama merkezdeki ana ekranda açarsam iyi çalışıyor. not: çoğu kullanıcının
4'ten fazla

4+ ekran, beni de hesaba katın!
user7116

7

Sen başvurmak gerekmez System.Windows.Formsuygulamanızdan montaj. Bunun yerine kullanabilirsiniz System.Windows.SystemParameters.WorkArea. Bu System.Windows.Forms.Screen.PrimaryScreen.WorkingArea,!


2

WPF eşdeğeri yoktur. System.Windows.Forms.Screenhala .NET çerçevesinin bir parçasıdır ve yine de WPF'den kullanılabilir.

Daha fazla ayrıntı için bu soruya bakın, ancak WindowInteropHelperWPF kontrolünüzü sarmak için sınıfı kullanarak ekranlarla ilgili aramaları kullanabilirsiniz .


2
var window = new MyWindow();

ekranın ortasında kullanım için:

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

ana pencerenin ortasında kullanmak için:

window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;

0

Bunu WPF koduna koymayı tercih ederim.

In [WindowName].xamldosyası:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.