Содержание статьи

В WPF приложениях контроль размеров окна играет ключевую роль для поддержания целостности интерфейса и корректного отображения элементов. Неконтролируемое изменение размеров может нарушать расположение элементов, искажаются графические компоненты, а взаимодействие с пользователем становится неудобным.
Для фиксирования окна используется свойство ResizeMode, которое позволяет полностью запретить растягивание и сжатие окна пользователем. Дополнительно точные размеры задаются через Width и Height, а ограничения минимальной и максимальной ширины и высоты устанавливаются через MinWidth, MaxWidth, MinHeight и MaxHeight.
При разработке приложений с фиксированным размером важно учитывать влияние масштабирования DPI и различных разрешений экрана. Установка ограничений размеров в коде на C# позволяет динамически контролировать поведение окна, предотвращая нежелательное растягивание при запуске на разных устройствах и мониторах с высокой плотностью пикселей.
Настройка свойства ResizeMode для фиксированного окна

Свойство ResizeMode управляет возможностью изменения размеров окна WPF пользователем. Для полного запрета растягивания следует установить значение ResizeMode=»NoResize». В этом режиме кнопка изменения размера на заголовке окна становится неактивной, а перетаскивание границ не изменяет ширину или высоту.
В XAML настройка выглядит следующим образом: <Window ResizeMode=»NoResize» Width=»800″ Height=»600″>. Одновременно можно задавать фиксированные размеры через Width и Height, чтобы окно всегда открывалось в заданных параметрах.
При необходимости ограничить только одну ось, доступны значения CanResize и CanMinimize. CanResize разрешает изменение размеров, сохраняя возможность минимизации, а CanMinimize позволяет оставлять кнопку минимизации активной при запрете растягивания. Это обеспечивает гибкий контроль интерфейса без полного отключения управления окном.
Фиксация размеров окна через Width и Height

Свойства Width и Height определяют точные размеры окна WPF при его создании. Задание фиксированных значений предотвращает автоматическое растягивание окна при изменении контента или масштабирования экрана.
Рекомендации по использованию:
- Установите Width и Height в XAML для базовой фиксации размеров: <Window Width=»1024″ Height=»768″>.
- Для динамической настройки размеров через код на C# используйте свойства окна: this.Width = 1024; this.Height = 768;.
- При задании фиксированных размеров рекомендуется согласовать их с ResizeMode=»NoResize» для полной блокировки изменения пользователем.
- Если приложение должно корректно отображаться на мониторах с разным DPI, учитывайте масштабирование: фиксированные размеры могут потребовать дополнительной адаптации элементов интерфейса.
Использование Width и Height совместно с ограничениями через MinWidth, MaxWidth, MinHeight и MaxHeight обеспечивает точный контроль размеров окна без искажения интерфейса.
Блокировка изменения размера окна пользователем мышью

Для предотвращения изменения размера окна пользователем мышью в WPF используется сочетание свойств ResizeMode, MinWidth, MaxWidth, MinHeight и MaxHeight. Основной способ – установка ResizeMode=»NoResize», которая отключает возможность перетаскивания границ окна.
Дополнительно рекомендуется закрепить размеры через:
- MinWidth и MaxWidth – равные значения ширины окна блокируют горизонтальное растягивание.
- MinHeight и MaxHeight – равные значения высоты предотвращают вертикальное изменение.
Для динамического контроля можно использовать обработчик события SizeChanged в коде на C#. В нем проверяется текущее значение Width и Height и при необходимости возвращается к установленным фиксированным размерам:
this.Width = fixedWidth; this.Height = fixedHeight;
Такой подход гарантирует, что окно не изменится при попытках пользователя растянуть или сжать его границы мышью, независимо от текущего разрешения экрана и масштабирования.
Использование MinWidth и MaxWidth для ограничения ширины

Свойства MinWidth и MaxWidth позволяют задать минимальную и максимальную ширину окна WPF, обеспечивая контроль над горизонтальными размерами. При совпадении этих значений окно становится фиксированной ширины, а попытки растянуть его мышью игнорируются.
Примеры использования в XAML:
- <Window MinWidth=»800″ MaxWidth=»800″ Width=»800″> – окно всегда открывается с шириной 800 пикселей.
- Если требуется только ограничение растягивания, можно задать MinWidth=»600″ MaxWidth=»1200″, позволяя изменять размеры в пределах диапазона.
В коде на C# ограничения задаются через свойства окна:
this.MinWidth = 800; this.MaxWidth = 800;
Такой подход предотвращает искажение интерфейса при масштабировании DPI и обеспечивает совместимость с мониторами разного разрешения, сохраняя структуру элементов интерфейса.
Использование MinHeight и MaxHeight для ограничения высоты

Свойства MinHeight и MaxHeight задают минимальную и максимальную высоту окна WPF, предотвращая нежелательное вертикальное растягивание или сжатие. При совпадении этих значений окно сохраняет фиксированную высоту независимо от действий пользователя.
Примеры настройки в XAML:
- <Window MinHeight=»600″ MaxHeight=»600″ Height=»600″> – окно всегда открывается с высотой 600 пикселей.
- Для ограничения диапазона высоты без полного фиксирования используйте разные значения, например: MinHeight=»400″ MaxHeight=»800″, что позволяет изменять размеры в пределах диапазона.
В коде на C# ограничения можно задать так: this.MinHeight = 600; this.MaxHeight = 600;
Использование MinHeight и MaxHeight совместно с MinWidth и MaxWidth обеспечивает полное фиксирование размеров окна и предотвращает искажение интерфейса на экранах с разным разрешением и масштабированием DPI.
Запрет растягивания окна при изменении DPI и масштабирования

Изменение DPI и масштабирование в Windows могут непреднамеренно изменять размеры окна WPF, даже если пользователь не взаимодействует с границами. Для предотвращения этого применяются свойства Width, Height, MinWidth, MaxWidth, MinHeight и MaxHeight вместе с отключением изменения размера через ResizeMode=»NoResize».
Рекомендации по фиксации размеров при масштабировании:
- Установите одинаковые значения MinWidth и MaxWidth, MinHeight и MaxHeight, чтобы исключить растяжение окна.
- Используйте фиксированные значения Width и Height в XAML или через код на C#.
- Включите в App.xaml поддержку PerMonitorV2 DPI-awareness, чтобы приложение корректно реагировало на разные экраны без растягивания окна:
<application xmlns=»http://schemas.microsoft.com/winfx/2006/xaml/presentation» xmlns:x=»http://schemas.microsoft.com/winfx/2006/xaml» x:Class=»App»>
<Application.Resources></Application.Resources>
</application>
Дополнительно можно обрабатывать событие DpiChanged в коде, возвращая окно к фиксированным размерам при смене монитора или масштаба:
this.Width = fixedWidth; this.Height = fixedHeight;
Такой подход обеспечивает стабильный интерфейс, предотвращает деформацию элементов и сохраняет точное отображение контента на экранах с различной плотностью пикселей.
Контроль размера окна через код на C#

В WPF можно динамически управлять размерами окна через код на C#, что позволяет блокировать изменение размеров независимо от пользовательских действий или масштабирования DPI.
Пример базовой фиксации размеров:
this.Width = 1024;
this.Height = 768;
this.ResizeMode = ResizeMode.NoResize;
this.MinWidth = 1024;
this.MaxWidth = 1024;
this.MinHeight = 768;
this.MaxHeight = 768;
Для наглядности можно использовать таблицу с примерами настройки размеров:
| Свойство | Описание | Пример значения |
|---|---|---|
| Width | Ширина окна | 1024 |
| Height | Высота окна | 768 |
| MinWidth / MaxWidth | Минимальная и максимальная ширина | 1024 / 1024 |
| MinHeight / MaxHeight | Минимальная и максимальная высота | 768 / 768 |
| ResizeMode | Блокировка изменения размера пользователем | NoResize |
Для динамического контроля размеров при изменении DPI или других событий можно использовать обработчики событий SizeChanged или DpiChanged, возвращая окно к заданным фиксированным значениям:
this.Width = fixedWidth; this.Height = fixedHeight;
Такой подход гарантирует стабильное отображение интерфейса, предотвращает растяжение и искажение элементов на различных мониторах и при масштабировании экрана.
Вопрос-ответ:
Как полностью запретить изменение размера окна в WPF приложении?
Чтобы запретить изменение размера окна, нужно установить свойство ResizeMode в значение NoResize. Одновременно рекомендуется задать фиксированные размеры через Width и Height, а также закрепить их с помощью MinWidth, MaxWidth, MinHeight и MaxHeight. Это блокирует растягивание и сжатие окна пользователем, сохраняя интерфейс в исходном виде.
Можно ли ограничить изменение только ширины или высоты окна?
Да, WPF позволяет задавать отдельные ограничения для осей. Например, MinWidth и MaxWidth определяют диапазон ширины, а MinHeight и MaxHeight — диапазон высоты. Если минимальное и максимальное значение совпадают, ось фиксируется, а другая может оставаться изменяемой.
Как контролировать размеры окна при смене разрешения экрана или DPI?
Для защиты интерфейса от масштабирования следует использовать одинаковые значения MinWidth/MaxWidth и MinHeight/MaxHeight. Дополнительно можно включить поддержку PerMonitorV2 DPI-awareness и обработку события DpiChanged, чтобы возвращать окно к заданным фиксированным размерам на мониторах с разной плотностью пикселей.
Можно ли задавать фиксированные размеры окна через код на C#?
Да, размеры окна задаются через свойства Width и Height. Дополнительно для полной блокировки следует установить ResizeMode = ResizeMode.NoResize и закрепить значения через MinWidth, MaxWidth, MinHeight и MaxHeight. Такой подход позволяет динамически контролировать окно во время выполнения приложения.
Что произойдет, если не зафиксировать размеры окна при масштабировании DPI?
Если не задать ограничения размеров, окно может изменять ширину и высоту автоматически при смене монитора или настройках масштабирования Windows. Это приводит к искажению элементов интерфейса, смещению кнопок и текста. Для стабильного отображения рекомендуется фиксировать размеры и использовать свойства минимальной и максимальной ширины и высоты вместе с ResizeMode.
Как запретить пользователю изменять размер окна в WPF приложении и при этом сохранить корректное отображение интерфейса на разных мониторах?
Для полной блокировки изменения размера окна следует установить свойство ResizeMode в значение NoResize. Одновременно задаются фиксированные размеры через Width и Height, а также закрепляются с помощью MinWidth, MaxWidth, MinHeight и MaxHeight. Чтобы окно сохраняло точные размеры при разных настройках DPI и разрешениях экрана, рекомендуется включить поддержку PerMonitorV2 DPI-awareness и при необходимости обрабатывать событие DpiChanged, возвращая окно к установленным значениям. Такой подход предотвращает растяжение, сжатие и смещение элементов интерфейса на мониторах с разной плотностью пикселей.
