原文地址:http://create.msdn.com/en-US/education/quickstarts/Working_with_Text_on_the_Windows_Phone
【譯者注:這篇文章是翻譯自微軟官方的WP7 QuickStart的第六篇,講述WP下的文本的使用。部分內容加入了自己的理解和表達習慣。而翻譯此系列的主要目的一是為了練習英語,二是讓自己作為一個BI開發人員對WP7的開發有一個瞭解。部分翻譯不當的地方望各位高人指出批評指正】
Windows Phone下的Silverlight提供了一些控制項用來顯示文本,其中帶有一些屬性來對文本進行格式化。在Silverlight下基於文本的控制項有TextBlock,TextBox和PasswordBox。此篇主要介紹這些控制項如何顯示和輸入文本。
其中包含下面的內容
TextBlock
TextBox
TextBox下的軟鍵盤
PasswordBox
TextBlock
TextBlock在Windows Phone下主要顯示唯讀文本資訊。可以通過它的Text屬性來指定顯示的文本。
下面的XAML 示範如何定義一個TextBlock控制項並且設定其Text屬性。
XAML
<TextBlock Text="Hello, world!" />
效果如。
也可以在TextBlock裡顯示更多的字串,並且每個字串都可以有不同的格式。通過Run元素就可以定義每個字串的格式,並且通過LineBreak將其分隔。
下面的XAML示範在TextBlock中的文本用Run定義不同的格式,並且使用LineBreak將其分隔開。
XAML
<Grid>
<TextBlock FontFamily="Arial" Width="400" >
<LineBreak/>
<Run Foreground="Maroon" FontFamily="Courier New" FontSize="40">
Courier New 24
</Run>
<LineBreak/>
<Run Foreground="Teal" FontFamily="Times New Roman" FontSize="30" FontStyle="Italic">
Times New Roman Italic 18
</Run>
<LineBreak/>
<Run Foreground="SteelBlue" FontFamily="Verdana" FontSize="20" FontWeight="Bold">
Verdana Bold 14
</Run>
</TextBlock>
</Grid>
結果如。
TextBox
TextBox用來輸入單行或者多行文本,其中的Text屬性是其中的常值內容。在下面的執行個體中,有三個文本輸入地區。當在第一個TextBox中輸入,相同的文本就會出現在第二個TextBox中。這裡是用到了TextChanged事件。第三個TextBox顯示浮水印。實現浮水印效果可以通過字型的屬性,比如Foreground和FontSize,還有一些事件,比如GotFocus和LostFocus。
在下面的線上執行個體中,單擊第一個文字框然後輸入一些內容可以看到啟動並執行效果。
筆記:這個線上執行個體是用傳統的Silverlight類比的Windows Phone下的Silverlight效果。實際啟動並執行效果跟在Windows Phone模擬器以及物理裝置中的略有不同。
XAML
<StackPanel Background="Transparent">
<TextBlock Text="Type Text Here" />
<TextBox x:Name="ReadWriteTB" TextChanged="ReadWriteTB_TextChanged"
IsReadOnly="False" />
<TextBlock Text="Read Only TextBox" />
<TextBox x:Name="ReadOnlyTB" IsReadOnly="True" />
<TextBlock Text="Search Type TextBox" />
<TextBlock FontSize="17" TextWrapping="Wrap">
When you click inside the text box the watermark text is removed and the
cursor appears ready for input.
</TextBlock>
<TextBox x:Name="WatermarkTB" Text="Search"
Foreground="Gray" GotFocus="WatermarkTB_GotFocus"
LostFocus="WatermarkTB_LostFocus" />
</StackPanel>
C#
//The following method displays the text entered in ReadWriteTB in ReadOnlyTB.
private void ReadWriteTB_TextChanged(object sender, RoutedEventArgs e)
{
ReadOnlyTB.Text = ReadWriteTB.Text;
}
//The foreground color of the text in WatermarkTB is set to Magenta when WatermarkTB
//gets focus.
private void WatermarkTB _GotFocus(object sender, RoutedEventArgs e)
{
if (WatermarkTB.Text == "Search")
{
WatermarkTB.Text = "";
SolidColorBrush Brush1 = new SolidColorBrush();
Brush1.Color = Colors.Magenta;
WatermarkTB.Foreground = Brush1;
}
}
//The foreground color of the text in WatermarkTB is set to Blue when WatermarkTB
//loses focus. Also, if SearchTB loses focus and no text is entered, the
//text "Search" is displayed.
private void WatermarkTB _LostFocus(object sender, RoutedEventArgs e)
{
if (WatermarkTB .Text == String.Empty)
{
WatermarkTB.Text = "Search";
SolidColorBrush Brush2 = new SolidColorBrush();
Brush2.Color = Colors.Blue;
WatermarkTB.Foreground = Brush2;
}
}
TextBox下的軟鍵盤
在Windows Phone下輸入文本的主要方式就是通過在螢幕上的小鍵盤,也就是軟鍵盤。當TextBox這樣的可編輯內容的控制項被啟用的時候,軟鍵盤就會從螢幕的下方滑入。當使用者點擊了編輯地區之外,滑動條或者返回按鈕,它就會從螢幕底端滑出。假如裝置有物理鍵盤的話,軟鍵盤就會自動關閉。可以設定軟鍵盤的外觀,可以根據程式的上下文更容易的輸入字元。比如,在輸入郵遞區號的時候,你只想看到數字鍵台,這個時候就可以通過InputScope屬性設定它。
下面列出了常用的軟鍵盤,以及可以在XAML和代碼中指定的InputScopeNameValue屬性。
Default
預設的樣式,輸入句子的時候首字母會自動大寫。
Text
適合用在文檔或者電子郵件中。
Chat
適合用在簡訊,聊天介面以及各種社區用戶端。
URL
適合輸入網頁地址。
TelephoneNumber
12鍵,適合輸入電話號碼。
EmailSmtpAddress
適合輸入電子右鍵地址,內建@和.com鍵。
CurrencyAmount
適合貨幣輸入。
除此之外還有更多60種模式,這裡不做一一介紹。
下面的樣本示範如何用XAML和C#給TextBox設定設定輸入模式。
XAML
<TextBox Text="HelloWorld">
<TextBox.InputScope>
<InputScope>
<InputScopeName NameValue="Chat" />
</InputScope>
</TextBox.InputScope>
</TextBox>
C#
InputScope IPChat = new InputScope();
InputScopeName IPNChat = new InputScopeName();
IPNChat .NameValue= InputScopeNameValue.Chat;
IPChat.Names.Add(IPNChat);
TBChatWindow.InputScope = IPChat;
PasswordBox
用來輸入密碼,使用者輸入的密碼顯示為*所以是無法被看到的。通過Password屬性就可以取出輸入的密碼,並且使用PasswordChar屬性來指定替換密碼的字元。
【譯者註:此部分的內容基本上和傳統Silverlight差不多,密碼框有些不同,另對於軟鍵盤的支援也是WP下特有的。】