问题描述
|
如何在RichTextBox中底部对齐文本?似乎控件不直接支持它。所以我正在寻找模仿它的方法。理想情况下,我将使控件的边界固定,并使文本结尾与底部对齐。
解决方法
文本来自TextBoxBase的默认控件模板内的,名为PART_ContentHost的ScrollViewer,该控件模板由RichTextBox包装。您应该覆盖控件模板,并让ScrollViewer将其VerticalAlignment声明为Bottom,或者将其模板绑定到VerticalContentAlignment。
下面,我完成了后者。这是从Blend中提取的默认控件模板的修改版本。我所做的唯一更改是将HorizontalAlignment = \“ {{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\" />