3.1 TextBlock

TextBlock是用于显示静态文本的控件,类似于Windows Form应用程序开发中的Label控件,一般用于显示一行或多行固定的文本数据,如页面上的提示文字等。但TextBlock更加灵活,功能也强大得多。在前面的实例中,已多次使用了TextBlock控件,如页面的标题、应用程序的名称等,都是采用TextBlock来显示的,如以下代码。

XAML代码:

<StackPanel x:Name="DouDouSoft" Grid.Row="0" Margin="12,17,0,28">
       <TextBlock x:Name="ApplicationTitle" Text="DouDouSoft" Style="{StaticResource PhoneTextNormalStyle}"/>
       <TextBlock x:Name="PageTitle" Text="Number puzzle" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" FontSize="56" />
</StackPanel>

从上述代码中可知,TextBlock控件是通过Text属性来设置和保存文本数据的。如果需要显示多行文本时,需要将TextWrapping属性设置为Wrap,即文本内容超过TextBlock控件的宽度时,换行显示;该属性的另一个取值是NoWrap,表示不换行,即一行显示所有数据,这是默认值。如以下代码演示了 TextWrapping属性的特性,代码执行结果如图3-1所示。

XAML代码:TextBlock1.xaml

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          <TextBlock Height="107" HorizontalAlignment="Left" Margin="51,83,0,0" Name="TextBlock1" Text="TextBlock是用于显示静态文本的控件,类似于Windows Form应用程序开发中的Label,一般用于显示一行或多行的固定文本数据,如页面上提示标签等。" VerticalAlignment="Top" Width="353" TextTrimming="None" />
          <TextBlock Height="118" HorizontalAlignment="Left" Margin="51,230,0,0" Name="TextBlock2" Text="TextBlock是用于显示静态文本的控件,类似于Windows Form应用程序开发中的Label,一般用于显示一行或多行的固定文本数据,如页面上提示标签等。" VerticalAlignment="Top" Width="353" TextWrapping="Wrap" />
          <TextBlock Height="107" HorizontalAlignment="Left" Margin="51,379,0,0" Name="TextBlock3" Text="TextBlock是用于显示静态文本的控件,类似于Windows Form应用程序开发中的Label,一般用于显示一行或多行的固定文本数据,如页面上提示标签等。" VerticalAlignment="Top" Width="353" TextTrimming="WordEllipsis" />
</Grid>

上例中,TextBlock1由于TextWrapping属性的默认值为NoWrap,因此,文本内容不换行,在宽度不足时,会被截断。TextBlock2的TextWrapping属性设置为Wrap,文本内容换行显示。在TextWrapping属性的设置为NoWrap时,还可以设置TextTrimming="WordEllipsis",将截断的文字内容用“…”来表示,如本例中的TextBlock3。

TextBlock还提供了InLines集合属性,使TextBlock支持对文本内容分段设置不同的样式,如字体、颜色等,可以结合Run元素实现这种应用。如以下XAML代码,在TextBlock中添加了多个Run,并使用<LineBreak/>分割行,执行效果如图3-2所示。

XAML代码:TextBlock2.xaml

<TextBlock Height="125" HorizontalAlignment="Left" Margin="66,346,0,0" Name="TextBlock2" VerticalAlignment="Top" Width="322" >
          <LineBreak/>
          <Run Text="第二行红色" FontSize="32" Foreground="red"></Run><LineBreak/>
          <Run Text="第三行黑色" FontSize="20" Foreground="Black" ></Run>
</TextBlock>

图3-1 使用TextWrapping属性

图3-2 XAML使用InLines集合

同样,通过程序代码也可以实现类似的效果,例如以下代码,执行效果如图3-3所示。

VB.NET代码:

Private Sub PhoneApplicationPage_Loaded(sender As System.Object,e As System.Windows.RoutedEventArgs)Handles MyBase.Loaded
       Me.TextBlock1.FontSize=26
       Me.TextBlock1.Inlines.Add("这是TextBlock的Inlines属性的第一句。")
       Dim run As New Run With {.FontSize=30,.Foreground=New SolidColorBrush(Colors.Red),.Text="第二句,使用红色粗体",.FontWeight=FontWeights.Bold}
       Me.TextBlock1.Inlines.Add(run)
       run=New Run With {.FontSize=36,.Foreground=New SolidColorBrush(Colors.Blue),.Text="第三句,使用蓝色",.FontWeight=FontWeights.Normal}
       Me.TextBlock1.Inlines.Add(run)
       Me.TextBlock1.TextWrapping=TextWrapping.Wrap
End Sub

图3-3 程序代码使用Inlines