Свойства размеров и позиционирования XAML-элементов

В XAML элементы могут содержать достаточно большое количество различных свойств, но только часть из них отвечает за размеры и позиционирование элемента, то есть за то где и как будет расположен XAML-элемент. В этой части мы рассмотрим основные Свойства размеров и позиционироваться XAML-элементов.

Свойства размеров и позиционироваться XAML-элементов

Свойства размеров XAML-элементов

В WPF за размеры элемента отвечают следующие свойства:

Свойство Тип Описание
ActualHeight double Текущая высота элемента в единицах, не зависящих от устройства (1/96 дюйма на единицу). Значение по умолчанию равно 0 (нулю).
ActualWidth double Текущая высота элемента в независимых единицах. По умолчанию равна нулю.
Height double Возвращает или задает рекомендуемую высоту элемента
Width double Возвращает или задает рекомендуемую ширину элемента
MinHeight double Минимально допустимая высота элемента
MaxHeight double Максимально допустимая высота элемента
MinWidth double Минимально допустимая ширина элемента
MaxWidth double Максимально допустимая ширина элемента

Среди этих свойств тройки свойств: Height, MinHeightиMaxHeight, а также Width, MinWidth и MaxWidth связаны между собой. Так, значения Height и Width не учитываются при построении макета приложения, если их значения выходят за пределы, установленные свойствами MinHeight/MaxHeight и MinWidth / MaxWidth соответственно.

Например, создадим новое приложение WPF и добавим на страницу MainWindow.xaml следующую кнопку:

<Button Height="30" Width="130" MaxHeight="20" MinHeight="10"/>

Здесь значение свойства Height выходит за пределы, установленные свойством MaxHeight, поэтому значение Height будет проигнорировано, а высота кнопки будет равна 20. Рассмотрим другой пример:

<Button Height="40" Width="130" MaxHeight="20" MinHeight="30"/>

здесь свойство MaxHeight меньше, чем MinHeight. Платформа WPF устанавливает высоту элемента следующим образом: начала проверяется значение MinHeight, затем MaxHeight и только, если значение Height находится в диапазоне значение между MinHeight и MaxHeight оно будет применено к элементу. В приведенном выше примере высота элемента будет установлена равной 30 так как возникает конфликт между MinHeight и MaxHeight, а MinHeight проверяется в первую очередь. Аналогичным образом выполняется и вычисление ширины элемента, а свойства ActualHeight и ActualWidth содержат установленную в итоге высоту или ширину элемента.

Единицы измерения размеров XAML-элементов

Свойства размеров XAML-элементов в WPF мы можем задавать, используя различные единицы измерения. По умолчанию, в WPF используют независимые от разрешения единицы (px) 1px = 1/96 дюйма. Также, могут использоваться следующие единицы измерения:

  • in — дюймы; 1in = 96 пикселей
  • cm — сантиметры; 1cm =(96/2.54) px
  • pt — точки; 1pt=(96/72) px

Единицы измерения указываются сразу после значения (без использования пробела). Например,

<Button Content="Кнопка" Width="1in"/>

здесь ширина кнопки задана равной одному дюйму.

Свойства позиционирования XAML-элементов

Теперь рассмотрим основные свойства позиционирования XAML-элементов.

Свойство Тип Описание
HorizontalAlignment
HorizontalAlignment
Определяет горизонтальное положение XAML-элемента внутри контейнера. Это свойство учитывается в том случае, если существует возможность горизонтального перемещения элемента внутри контейнера
VerticalAlignment
VerticalAlignment
Определяет вертикальное положение XAML-элемента внутри контейнера. Это свойство учитывается в том случае, если существует возможность вертикального перемещения элемента внутри контейнера
Margin Thickness Определяет внешние отступы вокруг XAML-элемента
Padding Thickness Определяем внутренние отступы элемента. Это свойство имеется только у тех элементов, которые могут иметь какое-либо содержимое.

 

Свойства VerticalAlignment и HorizontalAlignment

Значением свойства HorizontalAlignment является перечисление, у которого определены следующие поля:

Поле Значение Описание
Left 0 Элемент выравнивается по левому краю контейнера
Center 1 Элемент выравнивается по центру контейнера
Right 2 Элемент выравнивается по левому правому контейнера
Stretch 3 Элемент растягивается по ширине (значение по умолчанию)
Значение ширины (Width) элемента имеет приоритет над значением свойства HorizontalAlignment То есть, если вы установите и значение HorizontalAlignment и Width, то, в первую очередь, изменится ширина элемента, а уже затем элемент будет выравнен по горизонтали

В свою очередь, свойство VerticalAlignment может принимать следующие значения:

Поле Значение Описание
Top 0 Элемент выравнивается по верхней границе контейнера
Center 1 Элемент выравнивается по центру контейнера
Bottom 2 Элемент выравнивается по нижней границе контейнера
Stretch 3 Элемент растягивается по высоте контейнера (значение по умолчанию)

Как и ширина, свойство высоты (Height) имеет приоритет над свойством VerticalAlignment

Свойства Margin и Padding

Чтобы продемонстрировать работу свойств Margin и Padding, изменим код MainWindow.xaml следующим образом:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"
        Background="Blue">
    <Grid>
        <Border Background="Red">
            <Button Content="Кнопка" HorizontalAlignment="Stretch" Height="40" Width="50"/>
        </Border>
        
    </Grid>
</Window>

Теперь наша кнопка находится внутри элемента Border (рамка) и, при этом, фон окна установлен как красный, а для рамки фон — синий. В визуальном редакторе это будет выглядеть следующим образом:
Свойства размеров и позиционирования XAML-элементовТак как для Border мы не устанавливали свойств размеров и позиционирования, то по умолчанию рамка растянулась на всё доступное пространство окна и мы не видим синюю заливку. Теперь уберем все свойства позиционирования и размеров для кнопки, чтобы она также растянулась на всё доступное пространство Border:

<Button Content="Кнопка"/>

Вначале продемонстрируем работу свойства Padding — это свойство устанавливает внутренние отступы. Например, изменим это свойство для Border следующим образом:

<Border Background="Red" Padding="30">
    <Button Content="Кнопка"/>
</Border>

Здесь мы установили для Border все четыре внутренних отступа (слева, сверху, снизу и справа) по 30 единиц. Теперь наше окно будет выглядеть вот так:

Свойства размеров и позиционирования XAML-элементов

Теперь мы видим часть Border. Аналогичным образом мы можем установить внешние отступы, используя свойство Margin. Это приведет к тому, что сам элемент Border будет изменять свои размеры и мы увидим синюю заливку (фон окна). Например,

<Border Background="Red" Padding="30" Margin="50">
    <Button Content="Кнопка"/>
</Border>

Свойства размеров и позиционирования XAML-элементовСвойства Margin и Padding можно указывать различными способами. Так, в примере выше, мы указали для этих свойств по одному значению. Это означает, что по всем сторонам элемента будут установлены равные отступы. Изменим значение Margin следующим образом:

<Border Background="Red" Padding="30" Margin="50,10,20,20">
    <Button Content="Кнопка"/>
</Border>

Здесь мы отдельно указали отступ слева, сверху, справа и снизу. В результате окно примет следующий вид:

Свойства размеров и позиционирования XAML-элементовИтого

По умолчанию XAML-элементы пытаются занять всё доступное пространство в контейнере так как их свойства HorizontalAlignment и VerticalAlignment имеют значение Stretch. При этом, мы можем управлять размерами и позиционированием элементов, используя свойства размеров и положения элемента внутри контейнера.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии