单行TextBox溢出不可滚动

Single-line TextBox overflow unscrollable

不确定这是错误还是什么,但我的 none 文本框允许水平滚动。我尝试了各种方法来解决,但还没有成功。具体来说,我希望能够 select 文本并拖动 left/right 以显示溢出。

我首先删除了针对 TextBox 的任何样式。

然后我添加了一些属性,例如 HorizontalScrollBarVisibility=Visible, VerticalScrollBarVisibility=Disabled, AcceptsReturn=False, TextWrapping=NoWrap...

到目前为止,添加上述任何属性都没有任何作用。

我是否缺少 属性 或者我需要为此添加事件处理程序?

编辑

忘了说,实际滚动条显示(水平),但它不允许您拖动 selected 文本 left/right。我刚刚删除了一个针对 ScrollBar 的样式,但这似乎并没有妨碍。

编辑 2

简单示例:

<TextBox
    Text="Lots of text to cause overflow"
    HorizontalScrollBarVisibility="Visible"
    VerticalScrollBarVisibility="Disabled"
    AcceptsReturn="False"
    TextWrapping="NoWrap"/>

编辑 3

问题源于我用于定位 ScrollViewer 的样式,但我不确定原因:

<Style TargetType="{x:Type ScrollViewer}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                <Grid>
                    <ScrollContentPresenter Grid.Column="0" />
                    <ScrollBar x:Name="PART_VerticalScrollBar" HorizontalAlignment="Right" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
                    <ScrollBar x:Name="PART_HorizontalScrollBar" Orientation="Horizontal" VerticalAlignment="Bottom" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
                    <!--<Rectangle Grid.Row="1" Grid.Column="1" Fill="Red"/>-->
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

编辑 4

根据小樱的建议,我有:

<ControlTemplate TargetType="{x:Type ScrollViewer}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <ScrollContentPresenter Grid.Row="0" Grid.Column="0"/>
        <ScrollBar Grid.Row="0" Grid.Column="1" x:Name="PART_VerticalScrollBar" HorizontalAlignment="Right" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
        <ScrollBar Grid.Row="1" Grid.Column="0" x:Name="PART_HorizontalScrollBar" Orientation="Horizontal" VerticalAlignment="Bottom" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
    </Grid>
</ControlTemplate>

但是还是不行...

问题是 ScrollViewer 样式自动设置为您的 TextBox。您可以通过在样式中将 <Grid> 更改为 <Grid Background="Yellow"> 来测试它。

您覆盖它但不将 CanContentScroll="True" 设置为 ScrollContentPresenter

变化:

<ScrollContentPresenter Grid.Row="0" Grid.Column="0"/>

收件人:

<ScrollContentPresenter CanContentScroll="True"/>