/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class TextBox : Control
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class TextBox : Control
Public Class TextBox
Inherits Control
<TextBox .../>
						   Object
						   IInspectable
						   DependencyObject
						   UIElement
						   FrameworkElement
						   Control
					 TextBox 

WinUI 2 库应用包括大多数 WinUI 2 控件、特性和功能的交互式示例。 通过 Microsoft Store 获取应用,或在 GitHub 上获取源代码。

此示例显示了一个带有标题和占位符文本的 TextBox。 TextBox 中的 Text 用于向用户显示问候语。

<StackPanel>
    <TextBlock Text="What's your name?"/>
        <StackPanel Orientation="Horizontal" Margin="0,20,0,20">
            <TextBox x:Name="nameInput"
                     Header="Enter your name:" PlaceholderText="Name"
                     Width="300" HorizontalAlignment="Left"/>
            <Button Content="Hello button" Click="Button_Click"/>
        </StackPanel>
    <TextBlock x:Name="greetingOutput"/>
</StackPanel>
private void Button_Click(object sender, RoutedEventArgs e)
    greetingOutput.Text = "Hello, " + nameInput.Text + "!";

有关详细信息、设计指南和代码示例,请参阅 文本框

TextBox 控件使用户能够在应用中输入文本。 它通常用于捕获单行文本,但可配置为捕获多行文本。 文本以简单的统一纯文本格式显示在屏幕上。

TextBox 具有许多可以简化文本输入的功能:

  • 它支持使用墨迹和手写识别) 从键盘或笔 (的文本输入。
  • 它附带熟悉的内置上下文菜单,并提供对复制和粘贴文本的支持。
  • “全部清除”按钮允许用户快速删除已输入的所有文本。
  • 它还内置了拼写检查功能,并且在默认情况下处于启用状态。
  • 下面介绍如何在 XAML 和代码中创建 TextBox。

    <TextBox Width="500" Header="Notes" PlaceholderText="Type your notes here"/>
    
    TextBox textBox = new TextBox();
    textBox.Width = 500;
    textBox.Header = "Notes";
    textBox.PlaceholderText = "Type your notes here";
    // Add the TextBox to the visual tree.
    rootGrid.Children.Add(textBox);
    

    生成的 TextBox 如下所示。 蓝色边框表示 TextBox 具有焦点。

    TextBox 是要使用的正确控件吗?

    可以使用 TextBox 控件来显示和编辑未设置格式的文本。 如果需要一个可编辑文本框来接受密码或其他敏感输入,请参阅 PasswordBox。 如果需要一个文本框来输入搜索词,请参阅 AutoSuggestBox。 如果需要输入或编辑带格式的文本,请参阅 RichEditBox

    使用 TextBox 在表单中输入数据

    通常使用 TextBox 接受窗体上的数据输入,并使用 Text 属性从 TextBox 获取完整的文本字符串。 通常使用提交按钮 Click 之类的事件来访问 Text 属性,但是如果需要在文本更改时执行某些操作,则可以处理 TextChangedTextChanging 事件。 可以向 TextBox 添加 标头 (或标签) 和 PlaceholderText (或水印) ,以便向用户指示 TextBox 的用途。 若要自定义标头的外观,可以设置 HeaderTemplate 属性而不是 Header。 有关设计信息,请参阅 标签指南

    可以通过设置 MaxLength 属性来限制用户可键入的字符数。 但是, MaxLength 不会限制粘贴文本的长度。 使用 Paste 事件修改粘贴文本(如果这对你的应用很重要)。

    TextBox 包括清除 所有 按钮 (“x”) ,在框中输入文本时显示。 当用户单击“x”时,将清除 TextBox 中的文本。 它的外观如下所示。

    将 TextBox 设置为只读

    通过将 IsReadOnly 属性设置为 true,可以将 TextBox 设置为只读。 例如,你可以提供一个供用户输入评论的 TextBox,该文本框仅在特定条件下启用。 你可以使 TextBox 在不满足特定条件时变为只读。 如果只需要显示文本,请考虑改用 TextBlockRichTextBlock

    启用多行输入

    有两个属性控制 TextBox 是否在多行上显示文本。

  • 若要使文本框允许和显示新行或返回字符,请将 AcceptsReturn 属性设置为“true” 。
  • 若要启用文本换行,请将 TextWrapping 属性设置为“Wrap” 。 (TextBox 不支持 TextWrapping.WrapWholeWords 枚举值。) 多行 TextBox 在输入文本时将继续垂直增长,除非它受其 HeightMaxHeight 属性或父容器的约束。 应测试多行 TextBox 不会超出其可见区域,并限制其增长(如果存在)。 在需要时自动启用使用滚轮或触摸的滚动。 但是,默认情况下不显示垂直滚动条。 可以通过在嵌入的 ScrollViewer 上将 ScrollViewer.VerticalScrollBarVisibility 设置为 Auto 来显示垂直 滚动条,如下所示。
  • <TextBox AcceptsReturn="True" TextWrapping="Wrap" 
             MaxHeight="172" Width="300" Header="Description"
             ScrollViewer.VerticalScrollBarVisibility="Auto"/>
    
    TextBox textBox = new TextBox();
    textBox.AcceptsReturn = true;
    textBox.TextWrapping = TextWrapping.Wrap;
    textBox.MaxHeight = 172;
    textBox.Width = 300;
    textBox.Header = "Description";
    ScrollViewer.SetVerticalScrollBarVisibility(textBox, ScrollBarVisibility.Auto);
    

    下面是添加文本后 TextBox 的外观。

    设置文本显示的格式

    使用 TextAlignment 属性可对齐 TextBox 中的文本。 若要在页面布局中对齐 TextBox,请使用 HorizontalAlignmentVerticalAlignment 属性。

    虽然 TextBox 仅支持无格式文本,但你可以自定义文本在 TextBox 中的显示方式以匹配你的品牌。 你可以设置标准 Control 属性(如 FontFamilyFontSizeFontStyleBackgroundForegroundCharacterSpacing)以更改文本外观。 这些属性仅影响 TextBox 在本地显示文本的方式,因此,如果要将文本复制并粘贴到格式文本控件中,则不会应用任何格式。

    此示例显示了一个只读 TextBox,其中包含多个属性集以自定义文本的外观。

    <TextBox Text="Sample Text" IsReadOnly="True" 
             FontFamily="Verdana" FontSize="24"
             FontWeight="Bold" FontStyle="Italic" 
             CharacterSpacing="200" Width="300"
             Foreground="Blue" Background="Beige"/>
    
    TextBox textBox = new TextBox();
    textBox.Text = "Sample Text";
    textBox.IsReadOnly = true;
    textBox.FontFamily = new FontFamily("Verdana");
    textBox.FontSize = 24;
    textBox.FontWeight = Windows.UI.Text.FontWeights.Bold;
    textBox.FontStyle = Windows.UI.Text.FontStyle.Italic;
    textBox.CharacterSpacing = 200;
    textBox.Width = 300;
    textBox.Background = new SolidColorBrush(Windows.UI.Colors.Beige);
    textBox.Foreground = new SolidColorBrush(Windows.UI.Colors.Blue);
    // Add the TextBox to the visual tree.
    rootGrid.Children.Add(textBox);
    

    生成的 TextBox 如下所示。

    有关详细信息,请参阅带手写视图的文本输入

    修改上下文菜单

    默认情况下,TextBox 上下文菜单中显示的命令取决于 TextBox 的状态。 例如,当 TextBox 可编辑时,可以显示以下命令。

    若要修改上下文菜单中显示的命令,请处理 ContextMenuOpening 事件。 有关此示例,请参阅 自定义 RichEditBox 的 CommandBarFlyout - 在WinUI 2 库中添加“Share”示例。 有关设计信息,请参阅 上下文菜单指南

    选择、复制和粘贴

    可以使用 SelectedText 属性获取或设置 TextBox 中的选定文本。 使用 SelectionStartSelectionLength 属性以及 SelectSelectAll 方法来操作文本选择。 当用户选择或取消选择文本时,处理 SelectionChanged 事件以执行某些操作。 可以通过设置 SelectionHighlightColor 属性更改用于突出显示所选文本的颜色。

    默认情况下,TextBox 支持复制和粘贴。 你可以在应用中的可编辑文本控件上提供 Paste 事件的自定义处理。 例如,在将多行地址粘贴到单行搜索框中时,你可以从该地址中删除换行符。 或者,你可以检查粘贴文本的长度,如果它超出可保存到数据库的最大长度,则警告用户。 有关详细信息和示例,请参阅 Paste 事件。

    将文本框与触摸键盘配合使用

    当应用在具有触摸屏的设备上运行时,触摸键盘可用于文本输入。 TextBox 提供可以设置的属性,让用户使用触摸键盘在应用中输入数据更快、更轻松。 设置 InputScope 属性以匹配用户应输入的数据类型。 例如,如果 TextBox 仅用于输入 4 位 PIN,请将 InputScope 属性设置为 Number。 这将通知系统显示数字键盘布局,以便于用户输入 PIN。

    影响触摸键盘的其他属性是 IsSpellCheckEnabledIsTextPredictionEnabledPreventKeyboardDisplayOnProgrammaticFocus。 (IsSpellCheckEnabled 在使用硬件键盘时也会影响 TextBox。) 有关详细信息和示例,请参阅 使用输入范围更改触摸键盘和属性文档。

    控件样式和模板

    可以修改默认 的 StyleControlTemplate ,为控件提供唯一的外观。 有关修改控件的样式和模板的信息,请参阅 设置控件样式。 文件中包含 generic.xaml 定义控件外观的默认样式、模板和资源。 出于设计目的, generic.xaml 可通过 SDK 或 NuGet 包安装在本地使用。

    建议) (WinUI 样式 : 有关 WinUI 中更新的样式,请参阅 \Users\<username>\.nuget\packages\microsoft.ui.xaml\<version>\lib\uap10.0\Microsoft.UI.Xaml\Themes\generic.xaml非 WinUI 样式: 有关内置样式,请参阅 %ProgramFiles(x86)%\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic\generic.xaml

    如果自定义安装,位置可能会有所不同。 不同版本的 SDK 的样式和资源可能具有不同的值。

    XAML 还包括可用于在不修改控件模板的情况下修改不同视觉状态下控件颜色的资源。 修改这些资源优先于设置 背景前台等属性。 有关详细信息,请参阅 XAML 样式一文的轻量级样式部分。 从 Windows 10 版本 1607 (SDK 14393) 开始提供轻量级样式资源。

    TextControl 开头的资源由 TextBoxPasswordBoxRichEditBoxAutoSuggestBox 共享。 对这些资源的更改将影响所有四个控件。

    版本历史记录

    获取与此 对象关联的 CoreDispatcherCoreDispatcher 表示可以访问 UI 线程上的 DependencyObject 的工具,即使代码是由非 UI 线程启动的。

    (继承自 DependencyObject)

    获取或设置文本和其他 UI 元素在控制其布局的任何父元素中的流动方向。 此属性可以设置为 LeftToRightRightToLeft。 在任何元素上将 FlowDirection 设置为 RightToLeft 会将对齐方式设置为右对齐,将读取顺序设置为从右到左,并将控件的布局设置为从右到左流动。

    (继承自 FrameworkElement)

    获取或设置 UIElement (使用的 UI 主题及其子元素) 资源确定。 使用 RequestedTheme 指定的 UI 主题可以替代应用级 RequestedTheme

    (继承自 FrameworkElement)

    获取本地定义的资源字典。 在 XAML 中,可以通过 XAML 隐式集合语法将资源项建立为 property 元素的 frameworkElement.Resources 子对象元素。

    (继承自 FrameworkElement)

    为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。 将 handledEventsToo 指定为 true ,以调用提供的处理程序,即使在其他位置处理事件也是如此。

    (继承自 UIElement)

    汇报 UIElementDesiredSize。 通常,为其布局子级实现自定义布局的对象从其自己的 MeasureOverride 实现中调用此方法,以形成递归布局更新。

    (继承自 UIElement)

    每当应用程序代码或内部进程 ((例如重新生成布局传递) 调用 ApplyTemplate)时调用。 用最简单的术语来说,这意味着在 UI 元素在应用中显示之前调用 方法。 重写此方法以影响类的默认后模板逻辑。

    (继承自 FrameworkElement)

    在应用中处理 键盘快捷方式 (或快捷键) 之前调用。 每当应用程序代码或内部进程调用 ProcessKeyboardAccelerators 时调用。 重写此方法以影响默认加速器处理。

    (继承自 UIElement)

    在释放之前启动 按下 操作的指针设备时发生,同时在此元素中。 请注意, 不保证按下 操作的结尾会触发 PointerReleased 事件;可能会触发其他事件。 有关详细信息,请参阅备注。

    (继承自 UIElement)
    命令在以下情况下显示...
    复制文本处于选中状态。
    剪切文本处于选中状态。
    粘贴剪贴板包含文本。
    全选TextBox 包含文本。
    撤消文本已更改。
    Windows 版本 SDK 版本