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

相关推荐
郑同学的笔记25 分钟前
【Qt教程29】Qt5和Qt6版本对比
开发语言·qt
基德爆肝c语言29 分钟前
Qt 主窗口全家桶:菜单栏、工具栏、状态栏与对话框完全指南
开发语言·qt
XMYX-02 小时前
28 - Go JSON 数据操作
开发语言·golang·json
三*一2 小时前
Mapbox GL JS 自研面要素整形工具开发实录
开发语言·javascript·arcgis·ecmascript
超级小星星2 小时前
C 语言结构体内存对齐深度解析:从概念到实战
c语言·开发语言
狮子座明仔2 小时前
AgentSPEX:当 Agent 框架开始把“控制流“从 Python 里抠出来
开发语言·python
qq_431280703 小时前
上位与基恩士PLC通讯工作记录
c#
笨笨饿3 小时前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
科芯创展3 小时前
XZ4058B/C,20V,外置MOS,8.4V/8.7V开关充电芯片 宽范围电源电压:8.9V~20V-(电池充电电压:8.4V/8.7V)
c语言·开发语言
AI玫瑰助手3 小时前
Python流程控制:break与continue语句的区别与应用
开发语言·python·信息可视化