7.WPF 的 TextBox 和 TextBlock 控件

详细解析 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)
交互功能 有限(如超链接) 完整(选择/复制/粘贴/撤销)
典型场景 标签/说明/标题 表单输入/文本编辑区

🛠 使用场景指南

  1. 选择 TextBlock 当:

    • 需要显示静态文本(如标签、说明)
    • 要求富文本格式(混合字体/超链接)
    • 性能敏感区域(如列表项中的文本)
    • 不需要用户修改内容
  2. 选择 TextBox 当:

    • 需要用户输入数据(用户名/备注等)
    • 实现多行文本编辑(如评论框)
    • 需要文本编辑功能(复制/粘贴/撤销)
    • 绑定可修改的数据源

💡 特殊提示:

  • 密码输入使用专用 PasswordBox 控件(不显示明文)
  • 复杂富文本编辑需使用 RichTextBox
  • 大量文本展示建议 TextBlock + ScrollViewer 组合

通过合理选用这两个控件,可显著提升WPF应用的交互体验和性能表现。

相关推荐
SomeOtherTime5 小时前
Rust所有权(AI回答)
开发语言·后端·rust
Easyhood5 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
白杨尚青6 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
饮水桶_T9 小时前
JAVA IO流笔记
开发语言·数据结构·算法
Felven12 小时前
C. Brr Brrr Patapim
c语言·开发语言
路溪非溪13 小时前
python标准库使用总结
开发语言·python
SomeOtherTime14 小时前
Rust 面向对象介绍(AI回答)
开发语言·python·rust
zh_xuan15 小时前
kotlin常见面试题
开发语言·kotlin·面试题
草莓熊Lotso16 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
huaqianzkh17 小时前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#