WPF дает неправильный размер окна - PullRequest
1 голос
/ 31 мая 2019

Обработчик события Window_SizeChanged в моем приложении сообщает о неверном размере в SizeChangedEventArgs.NewSize.Кроме того, изменение WindowStyle на «None» (без рамки) уменьшило размер вместо увеличения.

Мне удалось воспроизвести это, создав приложение WPF по умолчанию и добавив обработчик для SizeChanged в Window.

В частности, мое разрешение монитора составляет 1920x1080.

При 100% = 96 DPI, при максимизации окна я ожидал этого размера, но получил 1934x1094 для стиля «Нет» и 1936x1056 в противном случае.

И при 125% = 120 DPI я бы ожидал размер 4/5 с разрешением 1536x864, но получился бы размер 1548.4x876.8 для стиля "None" и 1550.4x840.0 в противном случае.

Аналогичная проблема, WPF Maximized Window больше, чем screen , спрашивает, почему размер окна, как сообщается, больше, чем экран при максимизации, но это происходит для любого стиля окна.Кроме того, в этом отчете нет принятого ответа или ответа, который обрабатывает несколько мониторов или другие стили окон.

Это не объясняется с учетом границы и заголовка, поскольку размер окна не должен превышать размер экрана,и потому что граница не 7 пикселей в толщину.

Так что не так с моими вычислениями размера?Почему он дает больший размер, когда у окна есть рамка?В результате я не могу правильно разместить и масштабировать компонент в моем приложении.

1 Ответ

0 голосов
/ 03 июня 2019

Вот что сработало для меня, вдохновленный ответом на этот вопрос .Я добавил элемент управления верхнего уровня, растянутый, чтобы заполнить окно.В MainWindow.xaml

<Grid x:Name="MainGrid"
 HorizontalAlignment="Stretch"
 VerticalAlignment="Stretch"
 SizeChanged="MainGrid_SizeChanged">
// etc..        
</Grid>

я хотел размер клиентской области окна, который указан правильно в MainGrid_SizeChanged в SizeChangedHander в MainWindow.xaml.cs

private void MainGrid_SizeChanged(object sender, SizeChangedEventArgs e)
{
 // e.NewSize now has the correct values
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...