วิธีตั้งศูนย์กลางแอป WPF บนหน้าจอ


110

ฉันต้องการตั้งศูนย์กลางแอป WPF ของฉันเมื่อเริ่มต้นบนหน้าจอหลัก ฉันรู้ว่าฉันต้องตั้งค่า myWindow.Left และ myWindow.Top แต่ฉันจะรับค่าได้จากที่ไหน

ฉันพบSystem.Windows.Forms.Screen.PrimaryScreenซึ่งเห็นได้ชัดว่าไม่ใช่ WPF มีทางเลือก WPF ที่ให้ความละเอียดหน้าจอหรืออะไรทำนองนั้น?

คำตอบ:


143

ใส่สิ่งนี้ในตัวสร้างหน้าต่างของคุณ

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework รองรับใน: 4, 3.5, 3.0

.NET Framework Client Profile รองรับใน: 4, 3.5 SP1


2
ทำงานให้ฉัน (.NET 4) และฉันก็ชอบWindowStartupLocation.CenterOwnerหน้าต่างลูกบางตัวด้วย
Stonetip

Manualเริ่มต้นคือ Ref: msdn.microsoft.com/en-us/library/…
CJBS


49

คุณยังสามารถใช้คลาส Screen จากแอป WPF ได้ คุณเพียงแค่ต้องอ้างอิงชุด System.Windows.Forms จากแอปพลิเคชันของคุณ เมื่อคุณทำเสร็จแล้ว (และอ้างอิง System.Drawing สำหรับตัวอย่างด้านล่าง):

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

... ใช้งานได้ดี

คุณได้พิจารณาตั้งค่าคุณสมบัติหน้าต่างหลักของคุณ WindowStartupLocation เป็น CenterScreen หรือไม่?


1
โอ้ ... ฉันไม่รู้เรื่องนั้น ขอบคุณ.
Marcel B

1
ฉันกำลังมองหา WindowStartupLocation; รู้ว่าฉันเคยเห็นมาก่อนมีประโยชน์มาก!
chocojosh

@Michael Petrotta ขอบคุณ ฉันควรดูคุณสมบัติให้บ่อยขึ้น
meffordm

8

สิ่งที่เกี่ยวกับคลาส SystemParameters ใน PresentationFramework? มีคุณสมบัติWorkAreaที่ดูเหมือนจะเป็นสิ่งที่คุณกำลังมองหา

แต่ทำไมไม่ตั้งค่า Window.WindowStartupLocation ให้ทำงานล่ะ? CenterScreen เป็นหนึ่งในค่า enum ต้องปรับตั้งตรงกลางไหม


เยี่ยมมาก :) อย่างน้อยปัญหาเกี่ยวกับหน้าจอกลางสำหรับฉันคือหน้าต่างการเข้าสู่ระบบของฉันมีขนาดเล็กและหากผู้ใช้คลิกเข้าสู่ระบบในขณะที่แอปกำลังเปิดอยู่มักจะไม่มีใครสังเกตเห็นและเข้าสู่พื้นหลัง แต่ถ้าฉันสามารถเปิดได้บนจอแสดงผลหลักตรงกลางมันก็ใช้ได้ดี หมายเหตุ: ผู้ใช้ส่วนใหญ่มีหน้าจอ 4+ จอ
Michal Ciechan

4+ หน้าจอนับฉันเข้า!
user7116

7

คุณไม่จำเป็นต้องอ้างอิงSystem.Windows.Formsชุดประกอบจากแอปพลิเคชันของคุณ คุณสามารถใช้System.Windows.SystemParameters.WorkAreaไฟล์. ซึ่งเทียบเท่ากับSystem.Windows.Forms.Screen.PrimaryScreen.WorkingArea!


2

ไม่มี WPF เทียบเท่า System.Windows.Forms.Screenยังคงเป็นส่วนหนึ่งของ. NET framework และสามารถใช้งานได้จาก WPF

ดูคำถามนี้สำหรับรายละเอียดเพิ่มเติม แต่คุณสามารถใช้การโทรที่เกี่ยวข้องกับหน้าจอโดยใช้WindowInteropHelperคลาสเพื่อรวมคอนโทรล WPF ของคุณ


2
var window = new MyWindow();

สำหรับตรงกลางหน้าจอใช้:

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

สำหรับศูนย์กลางของหน้าต่างหลักให้ใช้:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.