3.2 TextBox

TextBox也是最常用的文本控件,主要用于输入和保存文本内容,是实现文本编辑的主要控件。用户可以通过TextBox的Text属性设置或获取文本内容,如果需要禁用TextBox的编辑功能,可以设置IsReadOnly属性为True,将它设置为只读。TextBox控件与Windows Form窗体程序设计中的TextBox特性基本相同,但功能更加强大。

TextBox控件同样存在TextWrapping属性,取值、作用与TextBlock控件相同,即当TextWrapping="Wrap"时,如果输入一行比较长的文本,长度超过TextBox控件的宽度时,文本内容会换行。TextBox控件还允许接收“回车”键,实现输入文本内容的手工换行,这时需要设置AcceptsReturn属性为True。

当TextBox控件中输入多行文本数据时,可以设置HorizontalScrollBarVisibility或VerticalScrollBarVisibility属性为ScrollBarVisibility.Visible,来显示水平或垂直滚动条,用户可以拖动滚动条查看更多文本内容。

TextBox控件的TextAlignment属性可以设置文本内容在文本框中的对齐方式,可以取Center、Left、Right、Justify,分别表示居中对齐、左对齐、右对齐和两端对齐。

TextBox控件还提供了SelectedText、SelectionLength、SelectionStart用于获取或设置文本框中全部或部分选中内容。其中,SelectedText用于设置或获取选中的内容,SelectionLength用于设置或获取选中文本的长度,SelectionStart用于设置或获取选中文本的起始点。

如以下实例结合TextBlock,设计了一个信息发布页面,单击“获取选中内容”按钮可以获取内容文本框中选中的文本内容,执行结果如图3-4所示。程序的XAML代码如下。

XAML代码:TextBox.xaml

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          <Grid.ColumnDefinitions>
             <ColumnDefinition Width="107*" />
             <ColumnDefinition Width="349*" />
          </Grid.ColumnDefinitions>
          <Grid.RowDefinitions>
             <RowDefinition Height="82*" />
             <RowDefinition Height="66*" />
             <RowDefinition Height="78*" />
             <RowDefinition Height="174*" />
             <RowDefinition Height="72*" />
             <RowDefinition Height="155*" />
          </Grid.RowDefinitions>
          <TextBlock HorizontalAlignment="Center" Name="TextBlock1" Text="信息发布" VerticalAlignment="Stretch" Margin="64,18,173,22" FontSize="28" Width="Auto" Grid.Column="1" />
          <TextBlock FontSize="20" HorizontalAlignment="Right" Name="TextBlock2" Text="标题:" VerticalAlignment="Center" Width="Auto" Grid.Row="1"/>
          <TextBlock FontSize="20" HorizontalAlignment="Right" Name="TextBlock3" Text="内容:" VerticalAlignment="Center" Width="Auto" Grid.Row="2" />
          <TextBox Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" Margin="5,5,0,0" Name="txbTitle" Text="" VerticalAlignment="Center" MinWidth="300" MinHeight="42" Height="60" Width="322" FontSize="20" InputScope="Url"></TextBox>
          <TextBox Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left" Margin="5,0,0,0" Name="txbContent" Text="" VerticalAlignment="Top" MinWidth="300" MinHeight="42" Height="252" Grid.RowSpan="2" Width="322" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" FontSize="20" TextWrapping="Wrap" />
          <Button Content="发布" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" Margin="5,0,0,0" Name="Button1" VerticalAlignment="Top" Width="120" />
          <Button Content="获取选中的内容" Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" Margin="125,0,0,0" Name="Button2" VerticalAlignment="Top" Width="225" />
          <TextBlock Grid.ColumnSpan="2" HorizontalAlignment="Center" Margin="47,25,37,26" Name="Result" Text="" VerticalAlignment="Top" Width="372" Grid.Row="5" TextWrapping="Wrap" />
      </Grid>

程序代码如下。

VB.NET代码:TextBox.xaml.vb

Private Sub Button1_Click(sender As System.Object,e As System.Windows.RoutedEventArgs)Handles Button1.Click
       Dim ResultString As String=""
       If Me.txbTitle.Text.Trim <> "" And Me.txbContent.Text.Trim <> "" Then
           ResultString="您发布的信息如下:"
           ResultString=vbNewLine & "标题:" & Me.txbTitle.Text.Trim
           ResultString=vbNewLine & "内容:" & Me.txbContent.Text.Trim
           Me.Result.Text=ResultString
       End If
    End Sub
    Private Sub Button2_Click(sender As System.Object,e As System.Windows.RoutedEventArgs)Handles Button2.Click
       Dim SelectedStr As String=""
       If Me.txbContent.SelectionLength > 0 Then
          MessageBox.Show("您选中的内容为:" & Me.txbContent.SelectedText & vbNewLine & "选中起始点为:" &_
          Me.txbContent.SelectionStart.ToString &_vbNewLine & "选中文本长度为:" & Me.txbContent.SelectionLength,"获取选中的内容",MessageBoxButton.OK)
       End If
    End Sub
    Private Sub PhoneApplicationPage_Loaded(sender As System.Object,e As System.Windows.RoutedEventArgs)Handles MyBase.Loaded
       Me.txbContent.Text="他们说,珀尔马特与施密特分别于1988年和1994年开始领导各自团队从事超新星研究,里斯在施密特的团队中发挥了重要作用。这两支研究团队都以Ia型超新星为观察对象,借助望远镜、新型数码感光设备、高性能计算机等,几乎同时确认宇宙正在加速膨胀。"
       Me.txbTitle.Text="3位科学家分享2011年诺贝尔物理学奖"
    End Sub
End Sub

图3-4 信息发布页面与TextBox文本内容选择演示

TextBox控件还有一个非常重要的属性是InputScope,此属性决定了当TextBox获得焦点时,手机系统的软件输入面板(Software Input Panel,SIP)的呈现方式。如当InputScope的取值为Url时,SIP面板如图3-5所示。InputScope的取值共有62种,SIP面板呈现方式有11种,InputScope值与SIP面板呈现方式的对应关系如表3-1所示。不同的SIP面板呈现方式中的按键不同,分别适合不同的输入场合,有利于提高输入数据的便捷性。

图3-5 InputScope="Url"时,呈现的SIP面板

表3-1 InputScope值与SIP面板的对应关系

续表

续表