如何使用大文本滚动聚焦TextBox

时间:2014-03-31 07:11:12

标签: c# xaml windows-phone-8 windows-phone

我有一个包含标题,文本框和页脚的网格。页眉和页脚占用尽可能多的空间,其余部分应由文本框完全填充。这是我到目前为止所得到的:

<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>

这个设置给了我想要的布局。但问题是,当文本框包含大量文本时,滚动不能按我想要的方式工作。

假设文本框包含的文本数量是可显示文本的两倍。只要文本框没有焦点,滚动就可以了。当我将焦点设置在文本框上并将插入符号放在第一个位置时,我无法滚动到文本框的末尾。当我把插入符号放在最后一个位置时,我无法滚动到文本框的顶部。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

TextBoxcontrol中已经内置了一个非常简单的解决方案,它被称为verticalscrollbarvisibility

顾名思义,它添加了一个垂直滚动条到TextBox。

这样就无需使用标记中的ScrollViewer。

修改

我做了一个非常简单的测试,证明它有效:

<TextBox Width="100"
         Height="100"
         VerticalScrollBarVisibility="Auto"
         TextWrapping="Wrap"
         Text="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" />

如果你复制&amp;将该控件粘贴到新项目并运行它,您将看到该选项有效。

在您的具体情况下,必须有另一个选项冲突,导致它不起作用。

答案 1 :(得分:0)

我有同样的问题。我为文本框创建了一个Style,这对我有用,也许这对你也有帮助。无需使用ScrollViewer。

<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>