只读RichTextBox不滚动的原因是因为RichTextBox的默认模板使用ScrollViewer而不是ContentControl。所以为了解决这个问题,你需要为RichTextBox创建自己的模板。
我所做的是在Blend中创建一个RichTextBox模板的副本,并将其剥离为只读情况。这消除了约90%的模板。下面的样式/模板保持:
<Style TargetType="c:RichTextBlock">
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid x:Name="RootElement">
<Border x:Name="Border" CornerRadius="0"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}"
>
<ContentControl x:Name="ContentElement" IsTabStop="False" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
使用这种风格/模板您只读RichTextBox'es,你应该是好去。
Goood运气,
吉姆·麦柯迪
面对面软件和YinYangMoney