WPF之TextBlock控件详解

文章目录

    • 1. TextBlock控件介绍
    • 2. TextBlock的基本用法
      • 2.1 基本语法
      • 2.2 在代码中创建TextBlock
    • 3. TextBlock的常用属性
      • 3.1 文本内容相关属性
      • 3.2 字体相关属性
      • 3.3 外观相关属性
      • 3.4 布局相关属性
    • 4. TextBlock文本格式化
      • 4.1 使用Run元素进行内联格式化
      • 4.2 其他内联元素
    • 5. 处理长文本
      • 5.1 使用LineBreak手动换行
      • 5.2 使用TextWrapping自动换行
      • 5.3 使用TextTrimming截断文本
    • 6. 示例应用场景
      • 6.1 基本文本显示
      • 6.2 多样式文本
      • 6.3 带有超链接的文本
    • 7. TextBlock与TextBox的比较
    • 8. TextBlock控件的优化与性能
      • 8.1 优化建议
      • 8.2 性能考虑
    • 9. 高级示例
      • 9.1 创建带格式化的TextBlock
      • 9.2 文本装饰效果
      • 9.3 使用渐变文本
    • 10. 特殊用例与技巧
      • 10.1 使文本可选择
      • 10.2 垂直文本显示
      • 10.3 实现文本阴影效果
    • 11. 总结与扩展
    • 12. 学习资源

可以根据Github拉取示例程序运行
GitHub程序演示地址(点击直达)
也可以在本文资源中下载
在这里插入图片描述

1. TextBlock控件介绍

TextBlock是WPF中最基础且使用最广泛的控件之一,主要用于显示文本内容。虽然它并不直接继承自Control类(实际上继承自FrameworkElement),但它的使用方式与其他控件相似。TextBlock是一个轻量级的文本显示控件,相比Label控件,它更加简单高效,特别适合显示短小的文本或多行文本。

TextBlock控件的主要功能是显示文本信息,它不具备边框、背景等复杂样式(虽然可以设置Background属性),也没有模板和触发器,这使得它在资源消耗上比Label控件更加轻量。

2. TextBlock的基本用法

2.1 基本语法

在XAML中创建一个简单的TextBlock控件:

<TextBlock Text="这是一个TextBlock控件"/>

或者使用开始和结束标签之间的内容作为文本:

<TextBlock>这是另一种设置文本的方式</TextBlock>

2.2 在代码中创建TextBlock

在C#代码中动态创建TextBlock:

// 创建TextBlock实例
TextBlock textBlock = new TextBlock();
// 设置文本内容
textBlock.Text = "这是在代码中创建的TextBlock";
// 设置其他属性
textBlock.FontSize = 16;
textBlock.Foreground = new SolidColorBrush(Colors.Blue);
// 将TextBlock添加到容器中(例如Grid)
myGrid.Children.Add(textBlock);

3. TextBlock的常用属性

TextBlock提供了多种属性用于控制文本的显示效果:

3.1 文本内容相关属性

  • Text:设置或获取TextBlock的文本内容
  • TextAlignment:设置文本的水平对齐方式(Left、Center、Right、Justify)
  • TextWrapping:控制文本的换行方式(NoWrap、Wrap、WrapWithOverflow)
  • TextTrimming:设置文本剪裁方式(None、CharacterEllipsis、WordEllipsis)

3.2 字体相关属性

  • FontFamily:设置字体家族
  • FontSize:设置字体大小
  • FontWeight:设置字体粗细(如Normal、Bold)
  • FontStyle:设置字体样式(如Normal、Italic)
  • FontStretch:设置字体的拉伸(如Normal、Condensed、Expanded)

3.3 外观相关属性

  • Foreground:设置文本颜色
  • Background:设置背景色
  • LineHeight:设置行高
  • TextDecorations:设置文本装饰(如下划线Underline)

3.4 布局相关属性

  • Padding:设置内边距
  • Margin:设置外边距
  • HorizontalAlignment:水平对齐方式
  • VerticalAlignment:垂直对齐方式

4. TextBlock文本格式化

4.1 使用Run元素进行内联格式化

TextBlock支持通过使用内联元素对文本的不同部分应用不同的格式:

<TextBlock><Run Text="这是" FontWeight="Bold"/><Run Text="不同格式" Foreground="Red" FontStyle="Italic"/><Run Text="的文本示例" FontSize="16"/>
</TextBlock>

4.2 其他内联元素

除了Run元素外,TextBlock还支持其他内联元素:

  • Bold:粗体文本
  • Italic:斜体文本
  • Underline:下划线文本
  • Hyperlink:超链接
  • LineBreak:换行
  • InlineUIContainer:可以包含其他UIElement元素

示例:

<TextBlock>这是<Bold>粗体</Bold>文本,这是<Italic>斜体</Italic>文本<LineBreak/>这是第二行文本,包含<Hyperlink NavigateUri="https://www.example.com">超链接</Hyperlink>
</TextBlock>

5. 处理长文本

在实际应用中,我们经常需要处理各种长文本的情况,TextBlock提供了多种解决方案:

5.1 使用LineBreak手动换行

<TextBlock>这是第一行文本<LineBreak/>这是第二行文本<LineBreak/>这是第三行文本
</TextBlock>

5.2 使用TextWrapping自动换行

<TextBlock TextWrapping="Wrap" Width="200">这是一段很长的文本内容,当文本超出控件宽度时,会自动换行显示,以确保文本内容完全可见。
</TextBlock>

5.3 使用TextTrimming截断文本

<TextBlock TextTrimming="CharacterEllipsis" Width="150">这是一段很长的文本,超出部分将被截断并显示省略号...
</TextBlock>

6. 示例应用场景

6.1 基本文本显示

<TextBlock Text="用户名:" FontSize="14" Margin="5"VerticalAlignment="Center"/>

6.2 多样式文本

<TextBlock Margin="10"><Run Text="WPF开发" FontWeight="Bold" FontSize="16"/><LineBreak/><Run Text="TextBlock控件" Foreground="Blue"/><LineBreak/><Run Text="可以显示多种样式的文本" FontStyle="Italic"/>
</TextBlock>

6.3 带有超链接的文本

<TextBlock Margin="10">更多信息请访问:<Hyperlink NavigateUri="https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/" RequestNavigate="Hyperlink_RequestNavigate">WPF官方文档</Hyperlink>
</TextBlock>
// 在代码中处理超链接点击事件
private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{// 使用默认浏览器打开链接Process.Start(new ProcessStartInfo{FileName = e.Uri.AbsoluteUri,UseShellExecute = true});e.Handled = true;
}

7. TextBlock与TextBox的比较

特性TextBlockTextBox
主要用途显示文本编辑文本
可编辑性只读可编辑
资源消耗轻量级较重
默认外观无边框有边框
文本选择不支持(默认情况)支持
内联格式化支持多种内联元素不支持(除非使用RichTextBox)

8. TextBlock控件的优化与性能

8.1 优化建议

  • 对于静态文本,优先使用TextBlock而非Label
  • 避免在TextBlock中放置过多文本内容
  • 当需要显示大量文本时,考虑使用RichTextBox或FlowDocument
  • 对于固定宽度的TextBlock,总是设置TextWrapping属性

8.2 性能考虑

// 优化大量TextBlock的创建
private void CreateOptimizedTextBlocks(Panel container, int count)
{// 为了提高性能,预先禁用布局更新container.BeginInit();for (int i = 0; i < count; i++){TextBlock textBlock = new TextBlock();textBlock.Text = $"文本块 {i}";// 其他属性设置container.Children.Add(textBlock);}// 完成后重新启用布局更新container.EndInit();
}

9. 高级示例

9.1 创建带格式化的TextBlock

<TextBlock Margin="10" LineHeight="25" TextAlignment="Justify"><Run FontWeight="Bold" FontSize="16">WPF TextBlock控件详解</Run><LineBreak/><Run>TextBlock是WPF中用于显示文本的基础控件,具有轻量级、高效的特点。它支持多种格式化选项,包括字体、颜色、装饰等。</Run><LineBreak/><Run FontStyle="Italic" Foreground="Gray">本文将详细介绍TextBlock的各种功能和用法。</Run>
</TextBlock>

9.2 文本装饰效果

TextBlock支持的文本装饰有:None、Underline、Baseline、Strikethrough、Overline。

<StackPanel Margin="10"><TextBlock Text="普通文本" Margin="0,5"/><TextBlock Text="下划线文本" TextDecorations="Underline" Margin="0,5"/><TextBlock Text="基线文本" TextDecorations="Baseline" Margin="0,5"/><TextBlock Text="删除线文本" TextDecorations="Strikethrough" Margin="0,5"/><TextBlock Text="上划线文本" TextDecorations="Overline" Margin="0,5"/>
</StackPanel>

9.3 使用渐变文本

<TextBlock Text="渐变文本效果" FontSize="20" FontWeight="Bold"><TextBlock.Foreground><LinearGradientBrush StartPoint="0,0" EndPoint="1,0"><GradientStop Color="Blue" Offset="0"/><GradientStop Color="Green" Offset="0.5"/><GradientStop Color="Red" Offset="1"/></LinearGradientBrush></TextBlock.Foreground>
</TextBlock>

10. 特殊用例与技巧

10.1 使文本可选择

默认情况下,TextBlock中的文本不可选择,但我们可以通过一些技巧使其可选:

// 在代码中创建可选择文本的TextBlock
TextBlock selectableTextBlock = new TextBlock();
selectableTextBlock.Text = "这是可以选择的文本";
// 使文本可选择
selectableTextBlock.IsHitTestVisible = true;
selectableTextBlock.Focusable = true;
selectableTextBlock.MouseDown += (s, e) => {if (e.ClickCount == 1) {((TextBlock)s).Focus();}
};

10.2 垂直文本显示

TextBlock本身不直接支持垂直文本,但可以通过以下方法实现:

  1. 使用RenderTransform旋转TextBlock:
<TextBlock Text="垂直文本" FontSize="16"><TextBlock.RenderTransform><RotateTransform Angle="90"/></TextBlock.RenderTransform>
</TextBlock>
  1. 利用窄宽度和TextWrapping属性:
<TextBlock Text="这是垂直显示的文本" Width="1" TextWrapping="Wrap"/>

10.3 实现文本阴影效果

<Grid><!-- 阴影文本 --><TextBlock Text="阴影文本效果" FontSize="24" FontWeight="Bold" Foreground="#50000000" Margin="2,2,0,0"/><!-- 前景文本 --><TextBlock Text="阴影文本效果" FontSize="24" FontWeight="Bold" Foreground="White"/>
</Grid>

11. 总结与扩展

TextBlock是WPF应用程序中不可或缺的基础控件,它简单、高效,但功能强大。通过本文的介绍,我们详细了解了TextBlock的基本用法、属性设置、文本格式化以及各种高级用法。

在实际应用中,需要根据具体需求选择合适的文本显示控件:

  • 对于简单的文本显示,使用TextBlock
  • 需要用户输入文本时,使用TextBox
  • 需要显示和编辑富文本时,使用RichTextBox
  • 显示大量格式化文档时,使用FlowDocument相关控件

随着WPF应用的发展,TextBlock控件也在不断完善,了解并熟练使用这一基础控件,对于开发高质量的WPF应用程序至关重要。

12. 学习资源

  • 微软官方文档 - TextBlock类
  • WPF TextBlock控件概述
  • C# Corner - WPF TextBlock

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云loT物联网介绍与使用

&#x1f310; 华为云 IoT 物联网平台详解&#xff1a;构建万物互联的智能底座 随着万物互联时代的到来&#xff0c;物联网&#xff08;IoT&#xff09;已成为推动数字化转型的关键技术之一。华为云 IoT 平台&#xff08;IoT Device Access&#xff09;作为华为云的核心服务之…

AnimateCC教学:形状补间动画的代码实现

核心代码: var shape; var animationProps = {width: 50,height: 50,cornerRadius: 0,color: "#00FF00" }; function init() { shape = new createjs.Shape();shape.x = 200;shape.y = 150;stage.addChild(shape);// 初始绘制updateShape();// 设置补间动画createTw…

Android学习总结之Retrofit篇

1. 注解原理概述 在 Java 里&#xff0c;注解是一种元数据&#xff0c;它为代码提供额外信息但不影响程序的实际逻辑。注解可以在类、方法、字段等元素上使用&#xff0c;并且能在编译时、运行时通过反射机制被读取。Retrofit 充分利用了 Java 注解机制&#xff0c;通过自定义…

windows11 编译 protobuf-3.21.12 c++

下载 protobuf 包&#xff0c;本文使用 3.21.12 版本&#xff0c;Gitub下载链接&#xff1a; Github官网 , 网盘下载&#xff1a; 网盘 如果电脑环境没有安装 cmake 则需要安装&#xff0c;本文测试使用 cmake-3.25.1 版本&#xff0c; 下载地址&#xff1a;[camke-3.25.1] (…

Java继承中super的使用方法

super 关键字在 Java 中用于访问父类的成员&#xff08;包括字段、方法和构造函数&#xff09;。当你在子类中调用父类的方法或访问父类的成员变量时&#xff0c;super 是必不可少的工具。 &#x1f511; super 的基本用法 1. 调用父类的构造方法 在子类的构造方法中&#x…

网络安全之浅析Java反序列化题目

前言 这段时间做了几道Java反序列化题目&#xff0c;发现很多题目都是类似的&#xff0c;并且可以通过一些非预期gadget打进去&#xff0c;就打算总结一下常见的题目类型以及各种解法&#xff0c;并提炼出一般性的思维方法。 正文 分析入口点 拿到题目&#xff0c;有附件最…

动态规划问题,下降路径最小和(dp初始化问题,状态压缩),单词拆分(回溯法+剪枝+记忆化),substr函数

下降路径最小和 题目链接&#xff1a; 931. 下降路径最小和 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开…

大数据治理自动化与智能化实践指南:架构、工具与实战方案(含代码)

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从人治到机治,数据治理正在进化 随着数据体量持续膨胀、数据场景复杂化,传统依赖人工规则的大数据治理方式已难以为继。企业在治理过程中面临: 数据质量问题激增,人工检测成本高 元数…

Golang - 实现文件管理服务器

先看效果&#xff1a; 代码如下&#xff1a; package mainimport ("fmt""html/template""log""net/http""os""path/filepath""strings" )// 配置根目录&#xff08;根据需求修改&#xff09; //var ba…

Linux-04-用户管理命令

一、useradd添加新用户: 基本语法: useradd 用户名:添加新用户 useradd -g 组名 用户:添加新用户到某个组二、passwd设置用户密码: 基本语法: passwd 用户名:设置用户名密码 三、id查看用户是否存在: 基本语法: id 用户名 四、su切换用户: 基本语法: su 用户名称:切换用…

Ollama 安装 QWen3 及配置外网访问指南

一、Ollama 安装 QWen3 安装步骤 首先尝试运行 QWen3 模型&#xff1a; ollama run qwen3 如果遇到版本不兼容错误&#xff08;Error 412&#xff09;&#xff0c;表示需要升级 Ollama&#xff1a; curl -fsSL https://ollama.com/install.sh | sh 验证版本&#xff1a; o…

高性能架构设计-数据库(读写分离)

一、高性能数据库简介 1.高性能数据库方式 读写分离&#xff1a;将访问压力分散到集群中的多个节点&#xff0c;没有分散存储压力 分库分表&#xff1a;既可以分散访问压力&#xff0c;又可以分散存储压力 2.为啥不用表分区 如果SQL不走分区键&#xff0c;很容易出现全表锁…

【Hive入门】Hive性能优化:执行计划分析EXPLAIN命令的使用

目录 1 EXPLAIN命令简介 1.1 什么是EXPLAIN命令&#xff1f; 1.2 EXPLAIN命令的语法 2 解读执行计划中的MapReduce阶段 2.1 执行计划的结构 2.2 Hive查询执行流程 2.3 MapReduce阶段的详细解读 3 识别性能瓶颈 3.1 数据倾斜 3.2 Shuffle开销 3.3 性能瓶颈识别与优化 4 总结 在大…

开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验(一)

一、前言 阿里云最新推出的 Qwen3-8B 大语言模型,作为国内首个集成“快思考”与“慢思考”能力的混合推理模型,凭借其 80 亿参数规模及 128K 超长上下文支持,正在重塑 AI 应用边界。该模型既可通过轻量化“快思考”实现低算力秒级响应,也能在复杂任务中激活深度推理模式,以…

Kafka Producer的acks参数对消息可靠性有何影响?

1. acks0 可靠性最低生产者发送消息后不等待任何Broker确认可能丢失消息&#xff08;Broker处理失败/网络丢失时无法感知&#xff09;吞吐量最高&#xff0c;适用于允许数据丢失的场景&#xff08;如日志收集&#xff09; 2. acks1 (默认值) Leader副本确认模式生产者等待Le…

虚拟机centos7安装docker

虚拟机CentOS 7上安装 Docker流程 1. 更新系统软件包 需要确保系统软件包是最新的 sudo yum -y update sudo&#xff1a;以超级用户权限执行命令。 yum&#xff1a;CentOS的包管理器工具。 -y&#xff1a;自动确认所有提示&#xff0c;直接执行。 2. 安装 Docker 依赖 在安装 …

ZYNQ MPSOC之PL与PS数据交互DMA方式

ZYNQ MPSOC之PL与PS数据交互DMA方式 1 摘要 XILINX ZYNQ 以及 ZYNQ MPSOC主要优势在于异构 ARM+FPGA。其中非常关键的一点使用了 AXI 总线进行高速互联。而且这个 AXI 总线是开放给我们用户使用的。在前面的文章中我们详解了使用了AXI-HP方式PL到PS端进行数据交互。本文主要涉…

枚举法——C++算法【泪光2929】

前言 "打牢基础,万事不愁" .C的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结. 引入 枚举在成熟框架中,用得还挺多的.枚举可以让程序更容易理解 之前写过一篇关于枚举的帖子--- 白话编程---数据篇(4)枚…

HarmonyOS NEXT应用开发-Notification Kit(用户通知服务)notificationManager.cancelAll

1.notificationManager.cancelAll 支持设备Phone2in1TabletCarWearable cancelAll(callback: AsyncCallback<void>): void 取消当前应用所有已发布的通知。使用callback异步回调。 系统能力&#xff1a;SystemCapability.Notification.Notification 示例&#xff1a; …

Mac 创建QT按钮以及一些操作

在创建QT项目好 后我们打开mainwindow.cpp&#xff0c;下面所示的代码都是在这个cpp文件里面因为它是窗口的入口函数 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QPushButton>//按钮的头文件MainWindow::MainWindow(QWidget *pa…