单行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"/>
不确定这是错误还是什么,但我的 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"/>