如何在WPF RichTextBox中底部对齐文本

问题描述 投票:2回答:1

如何在RichTextBox中底部对齐文本?似乎控件不直接支持它。所以我正在寻找模仿它的方法。理想情况下,我将控件的边界固定,文本的末尾与底部对齐。

wpf wpf-controls richtextbox vertical-alignment text-alignment
1个回答
1
投票

该文本来自一个名为PART_ContentHost的ScrollViewer,它位于由RichTextBox包装的TextBoxBase的默认控件模板中。您应该覆盖控件模板,并让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" />
© www.soinside.com 2019 - 2024. All rights reserved.