自定义后不显示TextBox ScrollBar

时间:2015-04-10 19:41:40

标签: c# wpf

我按照以下方式设计了自定义WPF TextBox。

<TextBox VerticalAlignment="Bottom" Name="txtResult" Padding="8" FontFamily="Consolas" Margin="5" TextWrapping="Wrap">
                <TextBox.Template>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Grid>
                            <TextBox Margin="4" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text}" BorderThickness="0" Background="{x:Null}" SnapsToDevicePixels="True"  ScrollViewer.VerticalScrollBarVisibility="Visible"/>
                            <Rectangle  Stroke="{StaticResource ResourceKey=detailMarkBrush}" StrokeThickness="0"/>
                        </Grid>
                    </ControlTemplate>
                </TextBox.Template>
            </TextBox>

但即使在ScrollViewer.VerticalScrollBarVisibility="Visible"中添加ScrollViewer或将文本框包装在{{1}}后,我的滚动条也不会显示。 有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您的ControlTemplate目标已经是TextBox,因此ControlTemplate没有理由包含其他TextBox。因此,可以将ScrollViewer替换为相应的内容主机 基于此,您的TextBox可能如下所示:

<TextBox VerticalAlignment="Bottom"
         Name="txtResult"
         Padding="8"
         FontFamily="Consolas"
         Margin="5"
         VerticalScrollBarVisibility="Visible"
         TextWrapping="Wrap">
    <TextBox.Template>
        <ControlTemplate TargetType="{x:Type TextBox}">
            <Grid>
                <ScrollViewer x:Name="PART_ContentHost"
                              Padding="{TemplateBinding Padding}"
                              BorderThickness="0" 
                              IsTabStop="False" 
                              Margin="4"
                              Background="{x:Null}"/>
                <Rectangle  Stroke="{StaticResource ResourceKey=detailMarkBrush}"
                            StrokeThickness="0"/>
            </Grid>
        </ControlTemplate>
    </TextBox.Template>
</TextBox>

如果您想在多个TextBoxes上使用此模板,我建议使用单独的样式。

(你的矩形有StrokeThickness为0的原因吗?)