详细解析 C# WPF 的 TextBox 和 TextBlock 控件
1. TextBlock 控件
核心定位
轻量级文本显示控件,用于呈现只读、格式化的文本内容,不支持用户编辑。
关键特性
- 只读显示:用户无法直接编辑内容
- 富文本支持:通过内联元素实现混合格式(粗体/斜体/超链接等)
- 灵活换行:
TextWrapping
控制文本换行方式 - ✂️ 截断处理:
TextTrimming
管理文本溢出时的省略方式 - ⚡ 高效渲染:性能优于 Label/TextBox,适合大量文本展示
核心属性
属性 | 说明 | 示例值 |
---|---|---|
Text | 显示文本 | "Hello World" |
TextWrapping | 换行方式 | Wrap , NoWrap |
TextTrimming | 溢出省略方式 | CharacterEllipsis , WordEllipsis |
TextAlignment | 文本对齐 | Left , Center , Right |
Inlines | 内联元素集合 | 混合文本格式 |
LineHeight | 行高 | 20 |
Foreground | 文本颜色 | Red , #FF0000 |
使用示例
<!-- 基础文本显示 --><TextBlock Text="用户协议内容" Margin="5"/><!-- 多行文本 --><TextBlock Text="长文本自动换行..."TextWrapping="Wrap"Width="200"/><!-- 富文本(混合格式) --><TextBlock><Run Text="重要提示:" FontWeight="Bold"/><LineBreak/><Hyperlink NavigateUri="https://example.com">点击查看详情</Hyperlink></TextBlock><!-- 数据绑定 --><TextBlock Text="{Binding CurrentTime, StringFormat='当前时间: {0:HH:mm}'}"/>
2. TextBox 控件
核心定位
用户输入控件,提供可编辑文本区域,支持基础文本编辑功能。
关键特性
- ✏️ 文本编辑:支持输入/修改/删除文本
- 滚动支持:内置垂直/水平滚动条
- 撤销栈:
Undo()
/Redo()
方法支持 - 只读模式:通过
IsReadOnly
切换 - ⚙️ 输入限制:
MaxLength
控制最大字符数 - 拼写检查:内置拼写检查功能
核心属性
属性 | 说明 | 示例值 |
---|---|---|
Text | 编辑内容 | 双向绑定数据 |
AcceptsReturn | 允许多行输入 | True /False |
TextWrapping | 多行换行方式 | Wrap |
VerticalScrollBarVisibility | 垂直滚动条 | Auto , Visible |
MaxLength | 最大字符数 | 100 |
IsReadOnly | 只读模式 | True |
SpellCheck.IsEnabled | 拼写检查 | True |
使用示例
<!-- 单行输入框 --><TextBox Text="{Binding UserName}"Width="200"MaxLength="50"/><!-- 多行文本框 --><TextBox AcceptsReturn="True"TextWrapping="Wrap"VerticalScrollBarVisibility="Auto"Height="100"SpellCheck.IsEnabled="True"/><!-- 密码输入框(实际使用PasswordBox) --><PasswordBox PasswordChar="*" /><!-- 带水印提示 --><TextBox><TextBox.Style><Style TargetType="TextBox"><Setter Property="Foreground" Value="Gray"/><Style.Triggers><Trigger Property="IsFocused" Value="True"><Setter Property="Foreground" Value="Black"/></Trigger></Style.Triggers></Style></TextBox.Style><TextBox.Text>请输入内容...</TextBox.Text></TextBox>
TextBlock 与 TextBox 核心区别
特性 | TextBlock | TextBox |
---|---|---|
编辑能力 | ❌ 只读 | ✅ 可编辑 |
主要用途 | 静态文本展示 | 用户输入区域 |
文本格式 | ✅ 富文本(混合格式/超链接) | ❌ 仅纯文本 |
性能 | ⚡ 轻量高效 | ⚖️ 相对较重 |
滚动条 | ❌ 需配合ScrollViewer | ✅ 内置滚动支持 |
多行支持 | ✅ 自动换行 | ✅ 需设置AcceptsReturn=True |
数据绑定方向 | 单向(OneWay) | 双向(TwoWay) |
交互功能 | 有限(如超链接) | 完整(选择/复制/粘贴/撤销) |
典型场景 | 标签/说明/标题 | 表单输入/文本编辑区 |
使用场景指南
选择 TextBlock 当:
- 需要显示静态文本(如标签、说明)
- 要求富文本格式(混合字体/超链接)
- 性能敏感区域(如列表项中的文本)
- 不需要用户修改内容
选择 TextBox 当:
- 需要用户输入数据(用户名/备注等)
- 实现多行文本编辑(如评论框)
- 需要文本编辑功能(复制/粘贴/撤销)
- 绑定可修改的数据源
特殊提示:
- 密码输入使用专用
PasswordBox
控件(不显示明文)- 复杂富文本编辑需使用
RichTextBox
- 大量文本展示建议 TextBlock + ScrollViewer 组合
通过合理选用这两个控件,可显著提升WPF应用的交互体验和性能表现。