Як центрувати додаток WPF на екрані?


110

Я хочу зосередити свою програму WPF при запуску на первинному екрані. Я знаю, що мені потрібно встановити myWindow.Left та myWindow.Top, але де я можу отримати значення?

Я виявив System.Windows.Forms.Screen.PrimaryScreen, що, мабуть, не WPF. Чи є альтернатива WPF, яка дає мені дозвіл екрана чи щось подібне?

Відповіді:


143

Помістіть це у свій конструктор вікон

WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;

.NET FrameworkSupported в: 4, 3.5, 3.0

Профіль клієнта .NET FrameworkПодтримується у: 4, 3.5 SP1


2
Працював для мене (.NET 4), і мені також подобаються WindowStartupLocation.CenterOwnerдеякі дитячі вікна
Stonetip

Типовим є Manual. Посилання: 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
о ... я цього не знав. Дякую.
Марсель B

1
Я шукав WindowStartupLocation; знав, що я бачив це раніше, дуже корисно!
chocojosh

@Michael Petrotta Дякую Мені слід частіше дивитися на властивості.
meffordm

8

Що з класом SystemParameters в PresentationFramework? Він має властивість WorkArea, яке, здається, саме те, що ви шукаєте.

Але чому б не встановити Window.WindowStartupLocation? CenterScreen - одне із значень enum. Вам доводиться підлаштовувати центрування?


Чудова знахідка :) Проблема з центральним екраном для мене, щонайменше, полягає в тому, що вікно входу в мене невелике, і якщо користувач клацає, коли програма відкривається, це часто стає непоміченим і відходить на другий план. Але якщо я можу відкрити його на первинному дисплеї в центрі, він прекрасно працює. Примітка: більшість користувачів мають 4+ екрани
Michal Ciechan

4+ екрани, порахуй мене!
користувач7116

7

Вам не потрібно посилатися на System.Windows.Formsзбірку зі своєї заявки. Натомість можна використовувати System.Windows.SystemParameters.WorkArea. Це рівнозначно System.Windows.Forms.Screen.PrimaryScreen.WorkingArea!


2

Не існує еквіваленту WPF. System.Windows.Forms.Screenяк і раніше є частиною .NET-бази та може бути використаний із WPF.

Дивіться це запитання для більш детальної інформації, але ви можете використовувати дзвінки, що відносяться до екранів, використовуючи WindowInteropHelperклас, щоб обернути свій контроль WPF.


2
var window = new MyWindow();

для центру використання екрана:

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

для центру використання батьківського вікна:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.