Làm thế nào để căn giữa một ứng dụng WPF trên màn hình?


110

Tôi muốn căn giữa ứng dụng WPF của mình khi khởi động trên màn hình chính. Tôi biết tôi phải đặt myWindow.Left và myWindow.Top, nhưng tôi lấy các giá trị ở đâu?

Tôi đã tìm thấy System.Windows.Forms.Screen.PrimaryScreen, đó dường như không phải là WPF. Có giải pháp thay thế WPF cung cấp cho tôi độ phân giải màn hình hoặc tương tự không?

Câu trả lời:


143

Đặt cái này vào hàm tạo cửa sổ của bạn

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET Framework được hỗ trợ trong: 4, 3.5, 3.0

Hồ sơ máy khách .NET Framework Hỗ trợ trong: 4, 3.5 SP1


2
Làm việc cho tôi (NET 4) và tôi cũng như WindowStartupLocation.CenterOwnercho một số cửa sổ con
Stonetip

Mặc định là Manual. Tham khảo: msdn.microsoft.com/en-us/library/…
CJBS

158

xaml

WindowStartupLocation="CenterScreen"

12
Tôi thích sử dụng WPF xaml hơn. Cảm ơn! ;-)
James

1
Đơn giản vậy thôi!
Jim

1
Đã thêm vào thẻ <Window> và Hoạt động hoàn hảo :)
Junaid Khan,

49

Bạn vẫn có thể sử dụng lớp Màn hình từ ứng dụng WPF. Bạn chỉ cần tham chiếu hợp ngữ System.Windows.Forms từ ứng dụng của mình. Khi bạn đã hoàn thành việc đó, (và tham chiếu System.Drawing cho ví dụ bên dưới):

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

... hoạt động tốt.

Bạn đã cân nhắc đặt thuộc tính cửa sổ chính WindowStartupLocation thành CenterScreen chưa?


1
ồ ... tôi không biết cái đó. Cảm ơn.
Marcel B

1
Tôi đang tìm kiếm WindowStartupLocation; biết rằng tôi đã thấy điều đó trước đây, rất hữu ích!
chocojosh

@Michael Petrotta Cảm ơn. Tôi nên xem xét các thuộc tính thường xuyên hơn.
meffordm

8

Còn về lớp SystemParameters trong PresentationFramework? Nó có thuộc tính WorkArea dường như là thứ bạn đang tìm kiếm.

Nhưng, tại sao thiết lập Window.WindowStartupLocation không hoạt động? CenterScreen là một trong những giá trị enum. Bạn có phải điều chỉnh căn giữa không?


Tìm thấy tuyệt vời :) Vấn đề với màn hình trung tâm đối với tôi ít nhất là, cửa sổ Đăng nhập của tôi nhỏ và nếu người dùng nhấp chuột xung quanh trong khi ứng dụng đang mở, nó thường không được chú ý và đi vào nền. Nhưng nếu tôi có thể mở nó trên màn hình chính ở trung tâm, nó hoạt động tốt. lưu ý: hầu hết người dùng có 4 màn hình trở lên
Michal Ciechan

4+ màn hình, hãy đếm tôi!
user7116

7

Bạn không cần phải tham chiếu System.Windows.Formsassembly từ ứng dụng của mình. Thay vào đó, bạn có thể sử dụng System.Windows.SystemParameters.WorkArea. Điều này tương đương với System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!


2

Không có WPF tương đương. System.Windows.Forms.Screenvẫn là một phần của .NET framework và có thể được sử dụng từ WPF.

Xem câu hỏi này để biết thêm chi tiết, nhưng bạn có thể sử dụng các lệnh gọi liên quan đến màn hình bằng cách sử dụng WindowInteropHelperlớp để bọc điều khiển WPF của bạn.


2
var window = new MyWindow();

cho trung tâm của màn hình sử dụng:

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

cho trung tâm của cửa sổ mẹ sử dụng:

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

0

Tôi thích đặt nó trong mã WPF.

Trong [WindowName].xamlhồ sơ:

<Window x:Class=...
...
WindowStartupLocation ="CenterScreen">
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.