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?

Marcel B
sumber

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

Indy9000
sumber
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
158

xaml

WindowStartupLocation="CenterScreen"
Pratik Deoghare
sumber
12
Saya lebih suka menggunakan WPF xaml. Terima kasih! ;-)
Yakobus
1
Sesimpel itu!
Jim
1
Ditambahkan ke tag <Window> dan Bekerja dengan Sempurna :)
Junaid Khan
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?

Michael Petrotta
sumber
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?

Eddie Butt
sumber
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!

Mimi
sumber
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.

Jeff Yates
sumber
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;
Artem
sumber
0

Saya lebih suka memasukkannya ke dalam kode WPF.

Dalam [WindowName].xamlfile:

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