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

相关推荐
QX_hao17 分钟前
【Go】--map和struct数据类型
开发语言·后端·golang
你好,我叫C小白21 分钟前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
Evand J2 小时前
【MATLAB例程】基于USBL和DVL的线性回归误差补偿,对USBL和DVL导航数据进行相互补偿,提高定位精度,附代码下载链接
开发语言·matlab·线性回归·水下定位·usbl·dvl
爱喝白开水a3 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
Neverfadeaway3 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
武子康3 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
杰克尼3 小时前
JavaWeb_p165部门管理
java·开发语言·前端
一成码农3 小时前
JavaSE面向对象(下)
java·开发语言
偶尔的鼠标人4 小时前
Avalonia DataGrid 控件的LostFocus事件会多次触发
开发语言·c#
晚风残4 小时前
【C++ Primer】第十二章:动态内存管理
开发语言·c++·c++ primer