WPF: автоматическое управление размерами - PullRequest
3 голосов
/ 26 октября 2009

Хотелось бы узнать, был ли в WPF своего рода автоматический контроль размеров.

Я имею в виду способ автоматического изменения размера элемента в соответствии с разрешением экрана пользователя без необходимости определять его в коде.

спасибо.

Ответы [ 2 ]

3 голосов
/ 07 ноября 2009

Ответ ДА. Если вы хотите, чтобы ваши элементы управления настраивали свой размер в зависимости от размера окна, есть много способов сделать это.

Для почти любого контроля это полезно:

HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="..." (set your margin to control the position)

Для гибкой компоновки с использованием сетки:

<Grid>
ColumnDefinition.Width="*"
RowDefinition.Height="*"

Для центральных областей, окруженных панелями или заполняющих остаток строки / столбца:

<DockPanel>

Для того, чтобы сохранить что-то такой же формы, но растянуть или сжать его до нужного размера:

<ViewBox>

Есть много других.

Если вы хотите, чтобы ваши элементы управления становились больше или меньше на экране в зависимости от пользовательских настроек отображения Windows, таких как DPI, это произойдет по умолчанию . Если пользователь увеличит системные значки и шрифты, ваш текст, значки, шрифты и т. Д. Также будут больше.

Если вы хотите связать размер ваших объектов на экране с конкретными настройками системы, вы можете привязать свойства к классам SystemParameters и SystemFonts, например:

SystemFonts.CaptionFontSize
SystemFonts.MenuFontSize
SystemFonts.IconFontSize
SystemFonts.StatusFontSize

SystemParameters.IconHeight
SystemParameters.IconVerticalSpacing
SystemParameters.MaximizedPrimaryScreenHeight

существует около 75 таких настроек. Обычно вы не используете их, потому что обычно достаточно обычной настройки WPF для размеров вашего объекта на основе DPI.

Как правило, вы не хотите, чтобы ваши экранные объекты имели определенное количество пикселей, потому что они выглядят крошечными на экранах с высоким разрешением, даже если конечный пользователь настроил Windows для отображения больших размеров. Это не было бы хорошо. Единственное исключение здесь, если вы хотите делать снимки экрана в виде растровых изображений для определенного разрешения экрана. В этом случае вы можете установить свой размер следующим образом:

control.Height =
  desiredHeightInActualScreenPixels
    * System.Windows.SystemParameters.MenuHeight
    / System.Windows.Forms.SystemInformation.MenuHeight;
3 голосов
/ 26 октября 2009

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

Если вы хотите, чтобы ваш пользовательский интерфейс масштабировался до доступного пространства, предоставляемого окном, вы можете использовать элемент управления ViewBox в качестве корневого элемента вашего окна. Затем все, что вы положите внутрь, будет масштабироваться в соответствии с тем, как вы конфигурируете Viewbox.

Имейте в виду, что это не типичный подход, используемый приложениями, поскольку обычно они растут / переворачиваются, чтобы использовать больше места. Например, Grid может использоваться для предоставления более важного раздела пространства пользовательского интерфейса над другим.

...