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应用的交互体验和性能表现。

相关推荐
玖笙&2 小时前
✨WPF编程基础【1.1】:XAML文档框架
c++·visualstudio·wpf
love530love2 小时前
EPGF 架构为什么能保持长效和稳定?
运维·开发语言·人工智能·windows·python·架构·系统架构
爱吃小胖橘2 小时前
Unity-动画子状态机
3d·unity·c#·游戏引擎
l1t2 小时前
测试duckdb的C插件模板的编译加工和加载
c语言·开发语言·数据库·插件·duckdb
峥嵘life3 小时前
Android16 应用代码新特性
java·开发语言·学习·安全
浮尘笔记3 小时前
Go-Zero API Handler 自动化生成与参数验证集成
开发语言·后端·golang
傻啦嘿哟3 小时前
用Requests+BeautifulSoup实现天气预报数据采集:从入门到实战
开发语言·chrome·python
兆。3 小时前
python全栈-数据可视化
开发语言·python·信息可视化
@大迁世界3 小时前
JavaScript 2.0?当 Bun、Deno 与 Edge 运行时重写执行范式
开发语言·前端·javascript·ecmascript