男女做爽爽爽网站-男女做羞羞高清-男女做爰高清无遮挡免费视频-男女做爰猛烈-男女做爰猛烈吃奶啪啪喷水网站-内射白浆一区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

【C#】WinForm到WPF轉(zhuǎn)型:TextBlock的應(yīng)用

admin
2025年5月16日 9:0 本文熱度 92

在Windows Forms(WinForm)開(kāi)發(fā)中,常用Label控件來(lái)顯示只讀文本;當(dāng)我們轉(zhuǎn)向WPF進(jìn)行開(kāi)發(fā)時(shí),用于顯示文本的常用控件則是TextBlockTextBlock是WPF中非常輕量且靈活的文本呈現(xiàn)控件,相比Label而言,TextBlock有更豐富的格式化功能和更好的性能表現(xiàn)。本文將從WinForm到WPF的轉(zhuǎn)型角度,為您介紹TextBlock在WPF中的應(yīng)用場(chǎng)景和典型用法。


WinForm與WPF之比較

WinForm中的文本顯示控件

在WinForm中,如果要在界面上展示文本內(nèi)容,通常使用以下控件:

  1. Label
    :用于顯示只讀文本,幾乎無(wú)格式化選項(xiàng),可更改字體、顏色等基本屬性
  2. TextBox
    :可編輯的文本控件,允許用戶輸入

WPF中的文本顯示控件

WPF中可以使用以下控件來(lái)顯示文本:

  1. TextBlock
    :輕量級(jí)文本顯示控件,支持豐富的文本格式化(如RunSpan等)
  2. Label
    :WPF中也提供了Label控件,但更多是兼容WinForm的用法;Label通常會(huì)包含一個(gè)ContentPresenter來(lái)顯示內(nèi)容

在實(shí)際WPF開(kāi)發(fā)中,推薦使用TextBlock實(shí)現(xiàn)只讀文本的顯示,因?yàn)樗哂懈玫目蓴U(kuò)展性和渲染性能。


TextBlock的基礎(chǔ)應(yīng)用

在WPF中,使用TextBlock最簡(jiǎn)單的方式就是直接將要顯示的文本通過(guò)Text屬性綁定到控件上。下面是一個(gè)演示示例,包括在XAML中的用法和后端C#代碼。

基本示例

<Window x:Class="AppTextBlock.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AppTextBlock"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <StackPanel Margin="20">
        <!-- 使用TextBlock顯示靜態(tài)文本 -->
        <TextBlock Text="這是一個(gè)簡(jiǎn)單的TextBlock,用于顯示文本,類似于WinForm的Label"
                   FontSize="16"
                   FontWeight="Bold"
                   Foreground="Blue"/>

        <!-- 多行文本示例 -->
        <TextBlock TextWrapping="Wrap"
                   Margin="0,10,0,0">
            這是一段較長(zhǎng)的文本,開(kāi)啟TextWrapping后,TextBlock會(huì)根據(jù)控件或者其容器的寬度自動(dòng)換行,非常方便。與WinForm中的Label相比較,WPF中的TextBlock可以更靈活地進(jìn)行文本渲染。
        </TextBlock>
    </StackPanel>
</Window>

核心要點(diǎn)

  • TextBlock
    是一個(gè)輕量級(jí)控件,渲染性能好
  • TextWrapping="Wrap"
    可以讓文本根據(jù)控件寬度自動(dòng)換行

TextBlock的高級(jí)用法

混合使用Run標(biāo)簽

和WinForm中的Label只能在一個(gè)文本元素中展示單一格式不同,WPF中TextBlock可以結(jié)合Run標(biāo)簽來(lái)實(shí)現(xiàn)多段文字的不同格式。

<Window x:Class="AppTextBlock.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AppTextBlock"
        mc:Ignorable="d"
        Title="Window1" Height="450" Width="800">

    <StackPanel>
        <TextBlock>
            <!-- 普通文本 -->
            <Run Text="這是一段普通文本。" />

            <!-- 加粗文本 -->
            <Run Text="這段文字加粗顯示。" FontWeight="Bold" />

            <!-- 彩色文本 -->
            <Run Text="這段文字為紅色。" Foreground="Red" />
        </TextBlock>
    </StackPanel>
</Window>

文本換行與行高

<Window x:Class="AppTextBlock.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AppTextBlock"
        mc:Ignorable="d"
        Title="Window2" Height="450" Width="800">

    <Grid>
        <TextBlock TextWrapping="Wrap"
           LineHeight="30"
           LineStackingStrategy="BlockLineHeight">

            <!-- 使用LineBreak手動(dòng)換行 -->
            第一行內(nèi)容<LineBreak/>
            第二行內(nèi)容<LineBreak/>
            第三行內(nèi)容
        </TextBlock>
    </Grid>
</Window>

  • TextWrapping="Wrap"
    :自動(dòng)換行
  • LineHeight="30"
    :行高設(shè)置為30
  • LineStackingStrategy="BlockLineHeight"
    :以行高為基準(zhǔn)進(jìn)行堆疊

數(shù)據(jù)綁定示例

在WPF的MVVM模式下,TextBlock可以通過(guò)Binding來(lái)與ViewModel中的屬性關(guān)聯(lián),從而實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的視圖更新。下面是一個(gè)簡(jiǎn)單的示例。

ViewModel代碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AppTextBlock
{
    publicclass MainViewModel : INotifyPropertyChanged
    {
        privatestring _displayText;
        publicstring DisplayText
        {
            get => _displayText;
            set
            {
                _displayText = value;
                OnPropertyChanged(nameof(DisplayText));
            }
        }

        public MainViewModel()
        
{
            // 構(gòu)造函數(shù)中初始化數(shù)據(jù)
            DisplayText = "Hello,WPF的TextBlock!";
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        
{
            PropertyChanged?.Invoke(thisnew PropertyChangedEventArgs(propertyName));
        }
    }
}

綁定到TextBlock

<Window x:Class="AppTextBlock.Window3"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AppTextBlock"
        mc:Ignorable="d"
        Title="Window3" Height="450" Width="800">

    <Window.DataContext>
         <local:MainViewModel/>
    </Window.DataContext>
    <Grid>

        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <TextBlock Text="{Binding DisplayText}" 
                   FontSize="18"
                   FontWeight="Bold"
                   Foreground="Purple"/>

        </StackPanel>
    </Grid>
</Window>

這樣在程序運(yùn)行時(shí),如果MainViewModelDisplayText屬性更新,UI上TextBlock顯示的文本將會(huì)自動(dòng)刷新。


TextBlock vs. WinForm的Label

特性/屬性
WinForm中的Label
WPF中的TextBlock
只讀文本顯示
文本格式化
基本字體設(shè)置
靈活支持Run等標(biāo)簽
支持?jǐn)?shù)據(jù)綁定
需手動(dòng)處理(或使用第三方框架)
原生支持?jǐn)?shù)據(jù)綁定
自動(dòng)換行
使用AutoSize或設(shè)置大小
TextWrapping
更靈活
性能及渲染
一般,GDI+渲染
優(yōu)秀,使用DirectX渲染
設(shè)計(jì)器支持
WinForm拖拽設(shè)計(jì)器
Visual Studio / Blend 設(shè)計(jì)器



結(jié)束語(yǔ)

從WinForm轉(zhuǎn)型到WPF中,TextBlock是顯示只讀文本的理想選擇。與WinForm中常用的Label控件相比,TextBlock不僅性能更好,而且支持更豐富的格式化選擇。同時(shí)WPF本身的MVVM數(shù)據(jù)綁定模式也讓界面邏輯與數(shù)據(jù)邏輯更好地分離,實(shí)現(xiàn)真正的組件化與模塊化開(kāi)發(fā)。

在實(shí)際項(xiàng)目中,如果需要顯示的文本內(nèi)容很復(fù)雜,或者需要結(jié)合RunSpan等子元素實(shí)現(xiàn)多樣式展示,TextBlock都是很好的選擇。希望本文能幫助您快速上手WPF的TextBlock控件!

閱讀原文:https://mp.weixin.qq.com/s/2gTGSp_9rONfoubaB5klpQ


該文章在 2025/5/16 9:04:59 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: αv天堂一区二区三区 | 无码中文字幕久久久一区二区 | 欧美偷拍色图 | 成人在线观看 | 国产一区二区三精品久久久无广告 | 国产女人第一次做爰视频 | 亚洲精品午夜久久 亚洲精品免费网址 | 国产精品久久久久久人妻精品流 | 亚洲伊人色综合网站 | 欧美网红一区二区在线播放 | 欧美日韩不卡合集视频 | 久久婷婷综合激情亚洲狠狠 | 韩国A级做爰片无码费看蚯蚓 | 亚洲欧美洲成人一区二区三区 | 久久久国产精品99热在线观看国产伦精品一区二区三区免 | 精品麻豆 | 精品人妻无码一区二区色欲产成人 | 国产特黄又粗又硬A片 | 国产亚洲欧美日韩综合综合二区 | 久久久天堂国产一区二区 | 国内自拍一区口 | 亚洲欧美色国产综合 | 日韩一卡2卡3卡4卡乱码网站导航 | 久久久九色综合亚洲成色777 | 少妇无码av无码专区在线观看 | 精品久久久久久久观小说 | 国产a天天免费观看美女 | 欧美日韩内射少妇 | 日本精品久久久久中文字幕 | 91在线观看国产 | 久久精品伊人无 | 538国产亚洲欧美日韩精品 | 成人在线免费观看网站 | 精品国产精品乱码不卞 | 99久久国产综合精品五月天喷水 | 久久性生大片免费观看性 | 在线精品视频一区二区三区 | 成人精品视频在线观看完整版 | 亚洲av真人在线播放 | 国产欧美二区综合 | 精品特黄毛片免费在线观 |