1、Windows 8 text selection :
文本的选择在 win8 中为触摸做了优化。手势为选择创建、处理和指挥(如剪切、复制、粘贴)都以触摸为中心的。单击一个单词就选中了
它。一旦选中了文本,选取器就会在两端显示,这个选取器可以在控件中的文本向前或者向后进行拖动。
静态文本控件拥有默认的上下文菜单用来存储操作,比如,复制,显示在你的指尖上。尝试着轻击或者保持按住,然后在选中的文本上拿
开手指,就会弹出一个上下文菜单。
在一个单词的前面或者后面插入表情符号,取决于你单击的 点 离单词的两端的哪端更近一些。一旦放置完一个表情符号,一个夹子
就会在表情符号下面显示。这个夹子可以响应单击操作,并可以在附近拖拽。当你拖拽这个符号夹子时,在你手势的方向会创建一个
选择区域。
试着在可编辑的文本中调出上下文菜单,你可以注意到从中又更多的命令可以选择。
显示截图:
在只读的 TextBlock 中
xaml:
<TextBlock Height="250" Width="400" IsTextSelectionEnabled="True"
TextWrapping="Wrap" TextTrimming="WordEllipsis"
Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit."/>
在可以编辑的 TextBox 中:
xaml :
<TextBox Height="250" Width="400" TextWrapping="Wrap" AcceptsReturn="True"
Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit." />
2、Accessing Text selection:
在 TextBox 和 TextBlock 这类文本控件中用户很容易控制选中的文本。这个实例演示怎样使用 SelectedText 属性用来获得一个
TextBox 中选中的内容。
当你选中下面 TextBox 中的文本时,选中的文本会映射到下面的 TextBlock 中。
显示截图:
页面中的 XAML :
<TextBox x:Name="selectionTextBox" TextWrapping="Wrap" AcceptsReturn="True"
Width="400" Height="200" Text="Lorem ipsum dolor sit amet,
consectetur adipiscing elit. In ligula nisi, vehicula nec eleifend vel, rutrum non dolor."/>
<TextBlock Text="{Binding ElementName=selectionTextBox, Path=SelectedText}" Foreground="Gray" Width="400"/>
3、Spell Checking:
在 TextBox 和 RichEditBox 这两个文本控件中,通过设置 IsSpellCheckEnabled 布尔属性,拼写检查都可以使用的。
这个特性检查用户通过键盘输入的内容。
试着更改键盘的布局,并且注意到用于拼写检查的字典也会相应的进行更改。
xaml :
<TextBox IsSpellCheckEnabled="True" Width="400" Height="200"/>
4、Text predication:
文本预测在 XAML 文本编辑控件中是另一个很棒的功能支持。当使用软键盘,为了预测目前正在输入的这个词的组成,XAML 文本控件会追踪用户的输入。
在插入符号附近显示一个建议的单词。如果用户点击这个词, 就会进入文本控件。
<TextBox IsTextPredictionEnabled="True" Width="400" Height="200" />
5、Input scopes :
这个 input scope 告诉软键盘一些关于开发人员期望用户输入文本区域的数据类型。
xaml:
<!--Default--> <TextBox Width="200" HorizontalAlignment="Left" InputScope="Default"/> <!--Search--> <TextBox Width="200" HorizontalAlignment="Left" InputScope="Search"/> <!--Url--> <TextBox Width="200" HorizontalAlignment="Left" InputScope="Url"/> <!--EmailSmtpAddress--> <TextBox Width="200" HorizontalAlignment="Left" InputScope="EmailSmtpAddress" /> <!--TelephoneNumber--> <TextBox Width="200" HorizontalAlignment="Left" InputScope="TelephoneNumber" /> <!--Number--> <TextBox Width="200" HorizontalAlignment="Left" InputScope="Number" />
6、RichEditBox and WinRT TOM:
在 RichEditBox 控件中的文档属性,暴露了 WinRT 文本对象模型 (TOM)中一些很强大的 APIs。如果你曾经用过
富文本编辑你会对这个 TOM 模型很容易理解。
文档(ITextDocument):
· 内容的序列化
· 获取选中内容
· 撤销/重做 功能
· 默认内容格式化
安排(ITextRange)
· 内容修正
· 包含搜索的内容导航
选择(ITextSelection)
· 选取内容的修正
段落属性(ITextParagrahFormat)
· 列表
· 对齐
· 缩进
· 行距
字符属性(ITextCharacterFormat)
· 前景色/背景色
· 样式、拉伸
· 超链接
· 其它格式化(例如,字距调整、下划线、删除线,等等……)
显示截图:
点击 “Font Color” 按钮 :
页面的 xaml :
<StackPanel Orientation="Horizontal"> <!--加粗--> <Button Click="BoldButtonClick" IsTabStop="False" Margin="0, 0, 20, 0">Bold</Button>
<!--斜体--> <Button Click="ItalicButtonClick" IsTabStop="False" Margin="0, 0, 20, 0">Italic</Button>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Find:" VerticalAlignment="Center"/> <!--输入查找文字--> <TextBox x:Name="findBox" Width="200" Height="20" TextChanged="FindBoxTextChanged"
GotFocus="FindBoxGotFocus" LostFocus="FindBoxLostFocus" Margin="0, 0, 20, 0"/> <Grid x:Name="fontColorGrid"> <Button x:Name="fontColorButton" Click="FontColorButtonClick" IsTabStop="False"
LostFocus="FontColorButtonLostFocus">Font Color</Button> <!--字体颜色弹出框, 默认 IsOpen="False"--> <Popup x:Name="fontColorPopup" IsOpen="False"> <Border BorderBrush="Gray" BorderThickness="2" Background="White"> <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Button x:Name="black" Click="ColorButtonClick"> <Button.Content> <Rectangle Fill="Black" Width="50" Height="25"/> </Button.Content> </Button> <Button x:Name="gray" Click="ColorButtonClick" Grid.Row="1"> <Button.Content> <Rectangle Fill="Gray" Width="50" Height="25"/> </Button.Content> </Button> <Button x:Name="darkgreen" Click="ColorButtonClick" Grid.Column="1"> <Button.Content> <Rectangle Fill="DarkGreen" Width="50" Height="25"/> </Button.Content> </Button> <Button x:Name="green" Click="ColorButtonClick" Grid.Row="1" Grid.Column="1"> <Button.Content> <Rectangle Fill="Green" Width="50" Height="25"/> </Button.Content> </Button> <Button x:Name="blue" Click="ColorButtonClick" Grid.Column="2"> <Button.Content> <Rectangle Fill="Blue" Width="50" Height="25"/> </Button.Content> </Button> <Button Click="ColorButtonClick" Grid.Row="2" Grid.Column="2">Close</Button> </Grid> </Border> </Popup> </Grid> </StackPanel> <!--进行操作的文本框--> <RichEditBox x:Name="editor" ScrollViewer.VerticalScrollBarVisibility="Visible" Grid.Row="1" Height="300" Width="500" VerticalAlignment="Top" />
相应的 C# :
给富文本框添加文本,在页面的构造函数中调用下面的方法 :
private async void LoadContentAsync() { //工程中的文件 StorageFile file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("TextFile.RTF "); IRandomAccessStream randAccStream = await file.OpenAsync(FileAccessMode.Read); // 从流中加载文档。 // 将输入文本作为 RTF 格式(RTF 文本将得到验证)。 editor.Document.LoadFromStream(TextSetOptions.FormatRtf, randAccStream); }
//首先声明一个全局的列表
// ITextRange : 表示文档中持续文本的范围并提供强大的编辑与数据 //绑定属性以及允许应用程序对文档文本进行选择、检查和更改的方法。 List<ITextRange> m_highlightedWords = new List<ITextRange>();
加粗选中的文本:
private void BoldButtonClick(object sender, RoutedEventArgs e) { // Document : 获取一个对象,该对象为 RichEditBox 中包含的文本启用对文本对象模型的访问。 ITextSelection selectedText = editor.Document.Selection; if (selectedText != null) { ITextCharacterFormat charFormatting = selectedText.CharacterFormat; //获取或设置文本范围的字符格式特性。 //切换当前设置。 charFormatting.Bold = FormatEffect.Toggle; //获取或设置文本范围的字符格式特性。 selectedText.CharacterFormat = charFormatting; } }
倾斜选择文本:
private void ItalicButtonClick(object sender, RoutedEventArgs e) { ITextSelection selectedText = editor.Document.Selection; if (selectedText != null) { ITextCharacterFormat charFormatting = selectedText.CharacterFormat; // 获取或设置字符是否是斜体。 charFormatting.Italic = FormatEffect.Toggle; selectedText.CharacterFormat = charFormatting; } }
字体颜色按钮,点击弹出 Popup:
private void FontColorButtonClick(object sender, RoutedEventArgs e) { fontColorPopup.IsOpen = true; // 尝试设置控件的焦点。 fontColorButton.Focus(Windows.UI.Xaml.FocusState.Keyboard); }
private void FontColorButtonLostFocus(object sender, RoutedEventArgs e) { fontColorPopup.IsOpen = false; }
点击颜色弹出框中的按钮 :
private void ColorButtonClick(object sender, RoutedEventArgs e) { Button clickedColor = (Button)sender; ITextCharacterFormat charFormatting = editor.Document.Selection.CharacterFormat; switch (clickedColor.Name) { case "black": { // 获取或设置前景色或文本颜色。 charFormatting.ForegroundColor = Colors.Black; break; } case "gray": { charFormatting.ForegroundColor = Colors.Gray; break; } case "darkgreen": { charFormatting.ForegroundColor = Colors.DarkGreen; break; } case "green": { charFormatting.ForegroundColor = Colors.Green; break; } case "blue": { charFormatting.ForegroundColor = Colors.Blue; break; } default: { charFormatting.ForegroundColor = Colors.Black; break; } } editor.Document.Selection.CharacterFormat = charFormatting; editor.Focus(Windows.UI.Xaml.FocusState.Keyboard); fontColorPopup.IsOpen = false; }
搜索文本框 获取焦点、失去焦点事件:
private void FindBoxTextChanged(object sender, TextChangedEventArgs e) { string textToFind = findBox.Text; if (textToFind != null) FindAndHighlightText(textToFind); } private void FindBoxLostFocus(object sender, RoutedEventArgs e) { ClearAllHighlightedWords(); } private void FindBoxGotFocus(object sender, RoutedEventArgs e) { string textToFind = findBox.Text; if (textToFind != null) FindAndHighlightText(textToFind); } //清除之前的高亮的文本 private void ClearAllHighlightedWords() { ITextCharacterFormat charFormat; for (int i = 0; i < m_highlightedWords.Count; i++) { charFormat = m_highlightedWords[i].CharacterFormat; //获取或设置文本背景(突出显示)色。 charFormat.BackgroundColor = Colors.Transparent; m_highlightedWords[i].CharacterFormat = charFormat; } //从 List<T> 中移除所有元素。 m_highlightedWords.Clear(); } //查找搜索的文本,并且高亮显示 private void FindAndHighlightText(string textToFind) { ClearAllHighlightedWords(); // 检索文档的有效情景的新文本范围。 // startPosition: 相对于情景开头的新文本范围的起始位置。 // endPosition: 新文本范围的结束位置。 // 返回结果: 新的文本范围。 ITextRange searchRange = editor.Document.GetRange(0, TextConstants.MaxUnitCount); //获取最大单位计数。 // 按 units 指定的数量向前或向后移动插入点。如果文本范围非退化, //则它将折叠到文本范围的开始或结束位置的插入点,具体取决于 //count,然后移动。 searchRange.Move(0, 0); bool textFound = true; do { // 搜索范围中特定文本字符串,如果找到,则选择该字符串 。 if (searchRange.FindText(textToFind, TextConstants.MaxUnitCount, FindOptions.None) < 1) textFound = false; else { //创建与此文本范围对象相同的新对象。
m_highlightedWords.Add(searchRange.GetClone()); ITextCharacterFormat charFormatting = searchRange.CharacterFormat; //把匹配的文本的背景,显示为黄色 charFormatting.BackgroundColor = Colors.Yellow; searchRange.CharacterFormat = charFormatting; } } while (textFound); }
7、PasswordBox :
用户可以输入密码的 PasswordBox 控件,是一个安全的,并且开发人员可定制。你可以指定用户输入内容的显示的符号。注意到下面的
文本框为每个字符显示 “ ? ” (默认是圆点)。另一个 Win8 提供的特性是密码框添加了一个 “显示文本” 的按钮。如果用户按住按钮 2秒钟
,密码框就会显示密码框中的文本。这样用户可以验证他们输入文本框中的内容。
显示效果 :
相应的 xaml :
<PasswordBox PasswordChar="?" IsPasswordRevealButtonEnabled="True"/>