4.4 文本框(TextBox)
文本框(TextBox)控件是表示一个可用于显示和编辑单格式、多行文本的控件。TextBox控件常用于在表单中编辑非格式化文本,例如,如果一个表单要求输入用户姓名、电话号码等,则可以使用 TextBox 控件来进行文本输入。控件的XAML语法如下:
<TextBox .../>
TextBox的高度可以是一行,也可以包含多行。对于输入少量纯文本(如表单中的“姓名”、“电话号码”等)而言,单行TextBox是最好的选择。同时你也可以创建一个使用户可以输入多行文本的TextBox,例如,表单要求输入较多的文字,可能需要使用支持多行文本的TextBox。设置多行文本的方法很简单,将TextWrapping特性设置为Wrap会使文本在到达TextBox控件的边缘时换至新行,必要时会自动扩展TextBox控件以便为新行留出空间,这点是和TextBlock控件一样的。同时TextBox控件也可以设置文字的相关属性(FontFamily、FontSize、FontStyle、FontWeight)。下面我们再来介绍TextBox控件中的一些特别的功能特性。
(1)支持回车键换行
因为TextBox控件是一个文本输入的控件,所以它除了对自动换行的支持之外,还这次还回车键换行的输入。不过在默认的情况下,TextBox控件是不支持回车键换行的,如果需要支持回车键换行,需要把把AcceptsReturn属性设置为true。
(2)键盘的类型
由于Windows Phone手机并不支持第三方的输入法软件,所以在文本框输入的情况下,只能够使用系统提供的输入法和键盘类型。那么TextBox控件是可以通过InputScope属性来设置在控件输入信息的时候所提供的键盘类型,比如你的TextBox文本框只是要求用户输入手机号码,那么你通过设置InputScope="TelephoneNumber"来制定电话号码的输入键盘。关于键盘的类型可以通过枚举InputScopeNameValue来看到所有的键盘类型,包括有EmailSmtpAddress(邮件地址输入)、Url(网址输入)、Number(数字输入)等等。如果使用C#代码来设置TextBox控件的键盘类型,代码的编写会稍微麻烦一点,示例代码如下所示:
textBox1.InputScope = new InputScope();
textBox1.InputScope.Names.Add(new InputScopeName() { NameValue = InputScopeNameValue.TelephoneLocalNumber });
(3)控件头
通常我们在创建一个输入框的时候都需要在输入框的上面添加相关的说明,比如“请输入用户名”等。那么TextBox控件会通过Header属性来直接支持添加这个控件头的描述说明,简化了控件的实现。Header属性的默认样式是跟系统的文本框的控件头的样式保持一致。
(4)操作事件
TextBox控件支持三个常用的操作事件,分别是TextChanged事件(TextBox控件文本信息的改变会触发该事件)、SelectionChanged事件(TextBox控件选择信息的改变会触发该事件)、Paste事件(在TextBox控件中粘贴的操作会触发该事件)。TextChanged事件通常会用来检查用户输入信息的改变,然后再获取控件的Text属性的信息进行相关的操作。SelectionChanged事件也是类似的作用,不过SelectionChanged事件则是检查用户选择的文本信息的改变,然后获取控件的SelectedText属性表示选择的文本信息,如果没有选择文本信息,则SelectedText的值是空的字符串。当控件中发生粘贴操作的时候会触发Paste事件,如果有一些信息的输入是不允许粘贴的,可以利用该事件来禁止粘贴的输入操作。
下面给出文本框的示例:创建TextBox控件演示TextBox控件的键盘选择,控件头和操作事件的实现。
代码清单4-3:文本框控件演示(源代码:第4章\Examples_4_3)
MainPage.xaml文件主要代码
------------------------------------------------------------------------------------------------------------------
<StackPanel>
<!--创建一个电话号码的输入文本框控件-->
<TextBox InputScope="TelephoneNumber">
<TextBox.Header>
请输入电话号码:
</TextBox.Header>
</TextBox>
<!--测试TextBox控件的相关操作事件-->
<TextBox x:Name="TextBox1" TextWrapping="Wrap" AcceptsReturn ="true" Header="输入信息:" SelectionHighlightColor="Red"
TextChanged="TextBox1_TextChanged"
SelectionChanged="TextBox1_SelectionChanged"
Paste="TextBox1_Paste"/>
<TextBlock x:Name="textBlock2" Text="操作信息:" FontSize="20"/>
<TextBlock x:Name="textBlock1" TextWrapping="Wrap" FontSize="20"/>
</StackPanel>
MainPage.xam.cs文件主要代码
------------------------------------------------------------------------------------------------------------------
// 文本的信息
string text = "";
// 选择的文本信息
string selectedText = "";
// 是否发生粘贴
string pasteTest = "";
// 文本变化的事件
private void TextBox1_TextChanged(object sender, TextChangedEventArgs e)
{
text = TextBox1.Text;
ShowInformation();
}
// 文本选择的事件
private void TextBox1_SelectionChanged(object sender, RoutedEventArgs e)
{
selectedText = TextBox1.SelectedText;
ShowInformation();
}
// 粘贴事件
private void TextBox1_Paste(object sender, TextControlPasteEventArgs e)
{
text = TextBox1.Text;
selectedText = TextBox1.SelectedText;
pasteTest = "产生了粘贴操作";
ShowInformation();
}
// 操作信息展示
private void ShowInformation()
{
textBlock1.Text = "文本信息:“" + text + "”选择的信息:“" + selectedText + "”粘贴的信息:“" + pasteTest + "”";
}
本文来源于《深入浅出Windows Phone 8.1 应用开发》
WP8.1 Runtime文章列表:http://www.cnblogs.com/linzheng/p/3998037.html
源代码下载:http://vdisk.weibo.com/s/zt_pyrfNHb99O
欢迎关注我的微博@WP林政 微信公众号:wp开发(号:wpkaifa)
WP8.1技术交流群:372552293