如何滚动带有大文本的焦点文本框
本文关键字:文本 焦点 何滚动 滚动 | 更新日期: 2023-09-27 17:55:07
我有一个包含页眉、文本框和页脚的网格。页眉和页脚根据需要占用尽可能多的空间,其余部分应完全由文本框填充。这是我到目前为止得到的:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid x:Name="TitlePanel" Grid.Row="0">
<TextBlock Text="Title" />
</Grid>
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="0">
<ScrollViewer Margin="0">
<TextBox x:Name="NoteText"
InputScope="Text"
AcceptsReturn="True"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
TextAlignment="Left"
TextWrapping="Wrap"
FontSize="24"
BorderThickness="0">
</TextBox>
</ScrollViewer>
</Grid>
<Grid x:Name="Footer" Grid.Row="2">
<TextBlock Text="Footer"/>
</Grid>
</Grid>
这种设置为我提供了我想要的布局。但是,问题是,当文本框包含大量文本时,滚动不会按我想要的方式工作。
假设文本框包含的文本量是可以显示的文本数的两倍。只要文本框没有焦点,滚动就可以了。当我将焦点放在文本框上并将插入符号放在第一个位置时,我无法滚动到文本框的末尾。当我将插入符号放在最后一个位置时,我无法滚动到文本框的顶部。
我该如何解决这个问题?
我遇到了同样的问题。我创建了一个文本框样式,这对我有用,愿这也对您有所帮助。无需使用滚动查看器。
<phone:PhoneApplicationPage.Resources>
<ControlTemplate x:Key="PhoneDisabledTextBoxTemplate" TargetType="TextBox">
<ContentControl x:Name="ContentElement" BorderThickness="0" HorizontalContentAlignment="Stretch" Margin="{StaticResource PhoneTextBoxInnerMargin}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="Stretch"/>
</ControlTemplate>
<Style x:Key="AppVerticalTextBoxStyle" TargetType="TextBox">
<Setter Property="FontFamily" Value="Cambria"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontSize" Value="26"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid Background="Transparent" >
<Grid>
<ScrollViewer x:Name="EnabledBorder" BorderBrush="Silver" BorderThickness="1" Background="{TemplateBinding Background}" Margin="{StaticResource PhoneTouchTargetOverhang}" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" >
<ContentControl x:Name="ContentElement" BorderThickness="0" HorizontalContentAlignment="Left" Padding="{TemplateBinding Padding}" VerticalContentAlignment="Top" />
</ScrollViewer>
<Border x:Name="DisabledOrReadonlyBorder" BorderThickness="{TemplateBinding BorderThickness}" Background="#FF71B68D" Margin="{StaticResource PhoneTouchTargetOverhang}" Visibility="Collapsed">
<Border.BorderBrush>
<SolidColorBrush Color="{StaticResource PhoneDisabledColor}"/>
</Border.BorderBrush>
<TextBox x:Name="DisabledOrReadonlyContent" Background="Transparent" Foreground="{StaticResource PhoneDisabledBrush}" FontWeight="{TemplateBinding FontWeight}" FontStyle="{TemplateBinding FontStyle}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" IsReadOnly="True" SelectionForeground="{TemplateBinding SelectionForeground}" SelectionBackground="{TemplateBinding SelectionBackground}" TextAlignment="{TemplateBinding TextAlignment}" TextWrapping="{TemplateBinding TextWrapping}" Text="{TemplateBinding Text}" Template="{StaticResource PhoneDisabledTextBoxTemplate}"/>
</Border>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</phone:PhoneApplicationPage.Resources>
从代码中删除 ScrollViewer。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="0">
<TextBox x:Name="NoteText"
InputScope="Text"
AcceptsReturn="True"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
TextAlignment="Left"
TextWrapping="Wrap"
FontSize="24"
BorderThickness="0"
Style="{StaticResource AppVerticalTextBoxStyle}" TextWrapping="Wrap">
</TextBox>
</Grid>
TextBox控件中已经内置了一个非常简单的解决方案,它称为垂直滚动条可见性。
顾名思义,它会向文本框添加一个垂直滚动条。
这样就无需标记中的滚动查看器。
编辑
我做了一个非常简单的测试来证明它有效:
<TextBox Width="100"
Height="100"
VerticalScrollBarVisibility="Auto"
TextWrapping="Wrap"
Text="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" />
如果将该控件复制并粘贴到新项目中并运行它,您将看到该选项有效。
在您的特定情况下,必须有另一个选项冲突才能使其不起作用。