Как я могу выровнять текст по нижнему краю в RichTextBox? Кажется, что управление не поддерживает это напрямую. Поэтому я ищу способы подражать этому. В идеале я бы установил фиксированную границу элемента управления и конец текста, выровненный по нижней части.
Как выровнять текст по нижнему краю в WPF RichTextBox
Ответы (1)
Текст поступает из ScrollViewer с именем PART_ContentHost внутри шаблона управления по умолчанию для TextBoxBase, который обернут RichTextBox. Вы должны переопределить шаблон элемента управления и либо сделать так, чтобы ScrollViewer объявил свой VerticalAlignment как Bottom, либо привязать его шаблон к VerticalContentAlignment.
Ниже я сделал последнее. Это модифицированная версия шаблона элемента управления по умолчанию, взятого из Blend. Единственное изменение, которое я сделал, это добавить VerticalAlignment="{TemplateBinding VerticalAlignment}" в ScrollViewer.
(Также обратите внимание, что он ссылается на Microsoft_Windows_Themes, который определяется как xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
Я не уверен, как это будет работать, если на машине пользователя нет Aero)
<Style x:Key="BottomAlignedTextBoxBaseStyle"
TargetType="TextBoxBase"
BasedOn="{StaticResource {x:Type TextBoxBase}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Microsoft_Windows_Themes:ListBoxChrome x:Name="Bd"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
RenderMouseOver="{TemplateBinding IsMouseOver}"
RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" SnapsToDevicePixels="true">
<ScrollViewer x:Name="PART_ContentHost"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Microsoft_Windows_Themes:ListBoxChrome>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled"
Value="false">
<Setter Property="Background"
TargetName="Bd"
Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Затем, чтобы использовать его, просто скажите:
<RichTextBox Style="{StaticResource BottomAlignedTextBoxBaseStyle}"
VerticalContentAlignment="Bottom" />