В чем разница между HorizontalAlignment и HorizontalContentAlignment в WPF?

В чем разница между:

  • HorizontalAlignment="Stretch"
  • HorizontalContentAlignment="Stretch"

в текстовом поле в WPF?

Пример примера:

<TextBox HorizontalAlignment="Stretch"
            HorizontalContentAlignment="Stretch"
            Height="100"
            TextWrapping="Wrap"
            AcceptsReturn="True"
         ></TextBox>

Ответ 1

HorizontalAlignment и VerticalAlignment определяют выравнивание самого элемента управления относительно его родительского элемента управления.

HorizontalContentAlignment и VerticalContentAlignment определяют выравнивание содержимого элементов управления относительно элемента управления.

Например, рассмотрим общее управление Button

<Button x:Name="aButton" Width="50" Height="25" />

Здесь вам нужно как-то указать, как этот элемент управления выравнивается внутри него - родительский элемент управления. Подходящим родительским элементом управления может быть StackPanel, Grid, WrapPanel и т.д.

Для Horizontal - и VerticalAlignment вы можете выбрать между опциями Left, Right, Center и Stretch. Первые три варианта соответствуют ширине и высоте кнопок, тогда как последний параметр пытается растянуть кнопку в указанном направлении, игнорируя установленную ширину или высоту:

Код

<StackPanel Orientation="Horizontal">
    <Button x:Name="aButton" Width="50" Height="25" HorizontalAlignment="Right" />
</StackPanel>

например, поместил бы Button внутри StackPanel и выровнял бы его слева.

HorizontalContentAlignment и VerticalContentAlignment выравнивает содержимое элемента управления. Содержимое - это специальный UIControl, который встроен в элемент управления, который вы можете просто использовать, заглянув в ControlTemplate ContentControl. Обратите внимание, что мы говорим, в частности, о ContenControls, которые действуют как контейнер, способный воспринимать только один объект для "переноса" внутри и отображения - его содержимого.

Итак HorizontalContentAlignment и VerticalContentAlignment определяют выравнивание этого содержимого относительно его контейнера. В случае изначально созданной кнопки содержание кнопок - это заголовок, и с двумя указанными свойствами вы выравниваете этот заголовок внутри границ кнопок, который также является одним из следующих: Left, Right, Center, Stretch.

Ответ 2

HorizontalAlignment выравнивает ваше текстовое поле относительно его содержащего родителя, тогда как HorizontalContentAlignment выравнивает текст вашего текстового поля по отношению к себе.