Bagaimana cara memusatkan aplikasi WPF di layar?


110

Saya ingin memusatkan aplikasi WPF saya saat startup di layar utama. Saya tahu saya harus menyetel myWindow.Left dan myWindow.Top, tetapi dari mana saya mendapatkan nilainya?

Saya menemukan System.Windows.Forms.Screen.PrimaryScreen, yang ternyata bukan WPF. Apakah ada alternatif WPF yang memberi saya resolusi layar atau semacamnya?

Jawaban:


143

Letakkan ini di konstruktor jendela Anda

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET FrameworkDidukung di: 4, 3.5, 3.0

Profil Klien .NET FrameworkDidukung di: 4, 3.5 SP1


2
Bekerja untuk saya (.NET 4) dan saya juga suka WindowStartupLocation.CenterOwneruntuk beberapa jendela anak
Stonetip

Standarnya adalah Manual. Ref: msdn.microsoft.com/en-us/library/…
CJBS


49

Anda masih dapat menggunakan kelas Layar dari aplikasi WPF. Anda hanya perlu mereferensikan perakitan System.Windows.Forms dari aplikasi Anda. Setelah Anda selesai melakukannya, (dan mereferensikan System.Drawing untuk contoh di bawah ini):

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

... bekerja dengan baik.

Sudahkah Anda mempertimbangkan untuk menyetel properti jendela utama Anda WindowStartupLocation ke CenterScreen?


1
oh ... saya tidak tahu yang itu. Terima kasih.
Marcel B

1
Saya mencari WindowStartupLocation; tahu saya telah melihat itu sebelumnya, sangat berguna!
chocojosh

@Michael Petrotta Terima kasih. Saya harus lebih sering melihat properti.
meffordm

8

Bagaimana dengan kelas SystemParameters di PresentationFramework? Ini memiliki properti WorkArea yang tampaknya menjadi apa yang Anda cari.

Tapi, mengapa pengaturan Window.WindowStartupLocation tidak berfungsi? CenterScreen adalah salah satu nilai enum. Apakah Anda harus menyesuaikan pemusatan?


Great ditemukan :) Masalah dengan layar tengah bagi saya setidaknya adalah, jendela Masuk saya kecil dan jika pengguna mengklik saat aplikasi sedang membukanya sering kali luput dari perhatian dan masuk ke latar belakang. Tetapi jika saya dapat membukanya di layar utama di tengah, itu berfungsi dengan baik. catatan: sebagian besar pengguna memiliki 4+ layar
Michal Ciechan

4+ layar, hitung saya!
pengguna7116

7

Anda tidak perlu mereferensikan System.Windows.Formsrakitan dari aplikasi Anda. Sebagai gantinya, Anda bisa menggunakan System.Windows.SystemParameters.WorkArea. Ini setara dengan System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!


2

Tidak ada yang setara dengan WPF. System.Windows.Forms.Screenmasih merupakan bagian dari kerangka .NET dan dapat digunakan dari WPF.

Lihat pertanyaan ini untuk lebih jelasnya, tetapi Anda dapat menggunakan panggilan yang berkaitan dengan layar dengan menggunakan WindowInteropHelperkelas untuk menggabungkan kontrol WPF Anda.


2
var window = new MyWindow();

untuk penggunaan tengah layar:

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

untuk pusat penggunaan jendela induk:

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

0

Saya lebih suka memasukkannya ke dalam kode WPF.

Dalam [WindowName].xamlfile:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.