语言: HTML | XAML

快速入门:添加文本输入和编辑控件 (XAML)

Applies to Windows and Windows Phone

XAML 框架包括用于输入和编辑文本的多个控件,以及一组用于格式化文本的属性。文本输入控件为 TextBoxPasswordBoxRichEditBox。本快速入门指南介绍了如何使用这些文本控件来显示、输入和编辑文本。

路线图: 本主题与其他主题有何关联?请参阅:

先决条件

我们假定你可以使用 C++、C# 或 Visual Basic 创建基本的 Windows 运行时应用。有关添加控件的说明,请参阅快速入门:添加控件和处理事件

选择文本控件

XAML 框架包括 3 个核心文本输入控件:TextBoxPasswordBoxRichEditBox。你使用的文本控件取决于具体情况。下面是一些方案和推荐的控件。

方案推荐的控件

输入或编辑纯文本,如在窗体中。

TextBox

输入密码。

PasswordBox

编辑需要设置格式、段落、超链接或嵌入式图像的文档、文章或博客。

RichEditBox

 

TextBox

你可以使用 TextBox 控件输入和编辑未格式化的文本。你可以使用 Text 属性在 TextBox 中获取和设置文本。下面是设置了 Text 属性的一个简单 TextBox 的 XAML 代码。


<TextBox  Height="35" Width="200" Text="Hello World!" Margin="20"/>

下面是此 XAML 代码所产生的 TextBox

简单文本框。

你可以通过将 IsReadOnly 属性设置为 true,从而将 TextBox 设置为只读。要让文本在多行 TextBox 中换行,请将 TextWrapping 属性设置为 Wrap,并将 AcceptsReturn 属性设置为 true

你可以在使用 SelectedText 属性的 TextBox 中获取或设置所选文本。当用户选定或取消选定文本时,使用 SelectionChanged 事件执行某些任务。

下面是使用这些属性和方法的一个示例。当你在第一个 TextBox 中选定文本时,所选文本在第二个 TextBox 中显示,该控件是只读的。SelectionLengthSelectionStart 属性的值在两个 TextBlock 中显示。此操作使用 SelectionChanged 事件完成。


<TextBox x:Name="textBox1" Height="75" Width="300" Margin="10"
         Text="The text that is selected in this TextBox will show up in the read only TextBox below." 
         TextWrapping="Wrap" AcceptsReturn="True"
         SelectionChanged="TextBox1_SelectionChanged" />
<TextBox x:Name="textBox2" Height="75" Width="300" Margin="5" 
         TextWrapping="Wrap" AcceptsReturn="True" IsReadOnly="True"/>
<TextBlock x:Name="label1" HorizontalAlignment="Center"/>
<TextBlock x:Name="label2" HorizontalAlignment="Center"/>



// C#
private void TextBox1_SelectionChanged(object sender, RoutedEventArgs e)
{
    textBox2.Text = textBox1.SelectedText;
    label1.Text = "Selection length is " + textBox1.SelectionLength.ToString();
    label2.Text = "Selection starts at " + textBox1.SelectionStart.ToString();
}

下面是该代码的结果。

文本框中的所选文本。

PasswordBox

你可以在 PasswordBox 控件中输入一行不换行的内容。用户无法查看输入的文本;仅显示代表文本的密码字符。你可以通过使用 PasswordChar 属性指定密码字符,并且可通过设置 MaxLength 属性来指定用户最多可输入的字符数量。

你可以通过 Password 属性获取用户输入的文本,通过在 PasswordChanged 事件的处理程序中。

下面是密码框控件的 XAML 代码,演示了 PasswordBox 的默认外观。当用户输入密码时,通过检查以判断所输入字符串是否为文本值“Password”。如果是,则向用户显示一条消息。


<PasswordBox x:Name="pwBox" Height="35" Width="200"
             MaxLength="8" PasswordChanged="pwBox_PasswordChanged"/>
           
<TextBlock x:Name="statusText" Margin="10" HorizontalAlignment="Center" />


// C#
private void pwBox_PasswordChanged(object sender, RoutedEventArgs e)
{
    if (pwBox.Password == "Password")
    {
        statusText.Text = "'Password' is not allowed as a password.";
    }
}

下面是运行此代码且用户输入“Password”时的结果。

密码框。

在 Windows 应用商店应用中,PasswordBox 具有内置按钮,用户触摸或点击该按钮可显示密码文本。下面是用户操作的结果。当用户释放该按钮时,密码会自动重新隐藏。

显示密码的密码框。

在 Windows 应用商店应用中,PasswordBox 在其下方具有内置复选框,用户触摸或点击该按钮可显示密码文本。

Windows Phone 密码框。

RichEditBox

你可以使用 RichEditBox 控件来输入和编辑包含格式文本、超链接和图像的富文本文档。你可以通过将 IsReadOnly 属性设置为 true,从而将 RichEditBox 设置为只读。

默认情况下,RichEditBox 支持拼写检查。若要禁用拼写检查器,请将 IsSpellCheckEnabled 属性设置为 false。有关详细信息,请参阅拼写检查指南和清单

你使用 RichEditBoxDocument 属性来获取其内容。RichEditBox 的内容是一个 Windows.UI.Text.ITextDocument 对象,与 RichTextBlock 控件不同,它将 Windows.UI.Xaml.Documents.Block 对象用作其内容。ITextDocument 接口提供了一种方法,可用来执行将文档加载并保存到流中、检索文本范围、获取主动选择、撤消和恢复更改、设置默认格式属性等操作。

以下示例显示了如何在 RichEditBox 中加载并保存富文本格式 (rtf) 文件。


<Grid Margin="120">
    <Grid.RowDefinitions>
        <RowDefinition Height="50"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal">
        <Button Content="Open file" Click="OpenButton_Click"/>
        <Button Content="Save file" Click="SaveButton_Click"/>
    </StackPanel>
            
    <RichEditBox x:Name="editor" Grid.Row="1"/>
</Grid>


private async void OpenButton_Click(object sender, RoutedEventArgs e)
{
    // Open a text file.
    Windows.Storage.Pickers.FileOpenPicker open =
        new Windows.Storage.Pickers.FileOpenPicker();
    open.SuggestedStartLocation =
        Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
    open.FileTypeFilter.Add(".rtf");

    Windows.Storage.StorageFile file = await open.PickSingleFileAsync();

    if (file != null)
    {
        Windows.Storage.Streams.IRandomAccessStream randAccStream =
            await file.OpenAsync(Windows.Storage.FileAccessMode.Read);

        // Load the file into the Document property of the RichEditBox.
        editor.Document.LoadFromStream(Windows.UI.Text.TextSetOptions.FormatRtf, randAccStream);
    }
}

private async void SaveButton_Click(object sender, RoutedEventArgs e)
{
    if (((ApplicationView.Value != ApplicationViewState.Snapped) ||
          ApplicationView.TryUnsnap()))
    {
        FileSavePicker savePicker = new FileSavePicker();
        savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
        
        // Dropdown of file types the user can save the file as
        savePicker.FileTypeChoices.Add("Rich Text", new List<string>() { ".rtf" });
        
        // Default file name if the user does not type one in or select a file to replace
        savePicker.SuggestedFileName = "New Document";

        StorageFile file = await savePicker.PickSaveFileAsync();
        if (file != null)
        {
            // Prevent updates to the remote version of the file until we 
            // finish making changes and call CompleteUpdatesAsync.
            CachedFileManager.DeferUpdates(file);
            // write to file
            Windows.Storage.Streams.IRandomAccessStream randAccStream =
                await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);

            editor.Document.SaveToStream(Windows.UI.Text.TextGetOptions.FormatRtf, randAccStream);

            // Let Windows know that we're finished changing the file so the 
            // other app can update the remote version of the file.
            FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file);
            if (status != FileUpdateStatus.Complete)
            {
                Windows.UI.Popups.MessageDialog errorBox =
                    new Windows.UI.Popups.MessageDialog("File " + file.Name + " couldn't be saved.");
                await errorBox.ShowAsync();
            }
        }
    }
}

使用触摸键盘

当应用在具有触摸屏的设备上运行时,触摸键盘可用于文本输入。当用户点击可编辑的输入字段(如 TextBoxPasswordBox)时,系统即会调用触摸键盘,当输入字段丢失焦点时,系统会隐藏触摸键盘。触摸键盘使用可访问性信息来判断何时调用以及何时隐藏。XAML 框架中提供的文本控件具有内置的自动属性。如果你创建自己的自定义文本控件,则必需实施 TextPattern 来使用触摸键盘。

摘要和后续步骤

你已经了解了如何创建 TextBoxPasswordBoxRichEditBox 控件,以便在应用中显示和编辑文本。

如需显示这些控件的更多代码示例,请参阅 XAML 文本编辑示例

相关主题

文本输入指南和清单
拼写检查指南和清单
使用 C# 或 Visual Basic 的 Windows 运行时应用的路线图
使用 C++ 的 Windows 运行时应用的路线图

 

 

显示:
© 2014 Microsoft