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

问题描述

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

解决方法

        文本来自TextBoxBase的默认控件模板内的,名为PART_ContentHost的ScrollViewer,该控件模板由RichTextBox包装。您应该覆盖控件模板,并让ScrollViewer将其VerticalAlignment声明为Bottom,或者将其模板绑定到VerticalContentAlignment。 下面,我完成了后者。这是从Blend中提取的默认控件模板的修改版本。我所做的唯一更改是将Horizo​​ntalAlignment = \“ {{TemplateBinding VerticalAlignment} \”添加到ScrollViewer。 (还要注意,它引用了定义为xmlns:Microsoft_Windows_Themes = \“ clr-namespace:Microsoft.Windows.Themes; assembly = PresentationFramework.Aero \”的Microsoft_Windows_Themes。 我不确定如果用户的机器上没有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\" />