Как выровнять текст снизу в WPF RichTextBox - PullRequest
2 голосов
/ 31 мая 2011

Как я могу выровнять текст снизу в RichTextBox? Кажется, что контроль не поддерживает это напрямую. Поэтому я ищу способы подражать ему. В идеале у меня должна быть фиксированная граница элемента управления, а конец текста выровнен по нижнему краю.

1 Ответ

1 голос
/ 01 июня 2011

Текст приходит из 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" />
...