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.pswp.cn/news/903654.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903654.shtml
英文地址,請注明出處:http://en.pswp.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…