详细解析 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 |
使用示例
xml
<!-- 基础文本显示 -->
<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 |
使用示例
xml
<!-- 单行输入框 -->
<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应用的交互体验和性能表现。