Bir TextBlock'ta metni formatlama


105

Bir metin içindeki bir metnin biçimlendirmesini nasıl elde ederim TextBlockWPF uygulamamdaki denetimin ?

Örneğin: Aşağıdaki örnekte olduğu gibi, bazı kelimelerin kalın, bazılarının italik ve bazılarının farklı renklerde olmasını istiyorum:

görüntü açıklamasını buraya girin

Sorumun arkasındaki sebep şu gerçek problem:

lblcolorfrom.Content = "Colour From: " + colourChange.ElementAt(3).Value.ToUpper();

Dizenin ikinci kısmının kalın olmasını istiyorum ve iki kontrol (Etiketler, Metin Blokları vb.) Kullanabileceğimi biliyorum, ancak zaten kullanımda olan çok sayıda kontrol nedeniyle bunu tercih etmiyorum.

Yanıtlar:


142

Kullanmanız gerekenler Inlines:

<TextBlock.Inlines>
    <Run FontWeight="Bold" FontSize="14" Text="This is WPF TextBlock Example. " />
    <Run FontStyle="Italic" Foreground="Red" Text="This is red text. " />
</TextBlock.Inlines>

Bağlama ile:

<TextBlock.Inlines>
    <Run FontWeight="Bold" FontSize="14" Text="{Binding BoldText}" />
    <Run FontStyle="Italic" Foreground="Red" Text="{Binding ItalicText}" />
</TextBlock.Inlines>

Ayrıca diğer özellikleri de bağlayabilirsiniz:

<TextBlock.Inlines>
    <Run FontWeight="{Binding Weight}"
         FontSize="{Binding Size}"
         Text="{Binding LineOne}" />
    <Run FontStyle="{Binding Style}"
         Foreground="Binding Colour}"
         Text="{Binding LineTwo}" />
</TextBlock.Inlines>

Boolean olarak kalın varsa (örneğin) dönüştürücüler aracılığıyla bağlanabilirsiniz.


98

Bunu XAML'de yeterince kolay bir şekilde yapabilirsiniz:

<TextBlock>
  Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
</TextBlock>

Olağanüstü! XAML'in bu tür yapıları desteklediğini bilmiyordum.
Allon Guralnek

6
bu bağlanmayı destekliyor mu?
Arsen Mkrtchyan

11
@ArsenMkrt Şuna ne dersiniz: <TextBlock FontWeight = "Bold" Text = "{Binding Budget}" />
Aetherix

2
@Aetherix Bunu işe alamadım. Bunu qqbenq'den kullandım: <TextBlock> Aylık <Bold> £ </Bold> geri ödemesi <Run FontWeight = "Bold" Text = "{Binding MonthlyPayment}" /> </TextBlock>
Gail Foad

49

Orada çeşitli vardır Inlinekullanabileceğiniz en basit biçimlendirme seçenekleri için size yardımcı olabilir elemanları Bold, Italicve Underline:

<TextBlock>
    Sample text with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> words.
</TextBlock>

görüntü açıklamasını buraya girin

Bence bu elemanlar aslında Spançeşitli özelliklere sahip elemanların kısaltmalarıdır (yani: for Bold, FontWeightözellik olarak ayarlanmıştır FontWeights.Bold).

Bu bizi bir sonraki seçeneğimize getiriyor: yukarıda bahsedilen Spanunsur.

Bu öğe ile yukarıdaki ile aynı etkileri elde edebilirsiniz, ancak size daha fazla olasılık verilir; Foregroundveya Backgroundözelliklerini (diğerlerinin yanı sıra) ayarlayabilirsiniz :

<TextBlock>
    Sample text with <Span FontWeight="Bold">bold</Span>, <Span FontStyle="Italic">italic</Span> and <Span TextDecorations="Underline">underlined</Span> words. <Span Foreground="Blue">Coloring</Span> <Span Foreground="Red">is</Span> <Span Background="Cyan">also</Span> <Span Foreground="Silver">possible</Span>.
</TextBlock>

görüntü açıklamasını buraya girin

SpanEleman da bu gibi başka elemanlar içerebilir:

<TextBlock>
    <Span FontStyle="Italic">Italic <Span Background="Yellow">text</Span> with some <Span Foreground="Blue">coloring</Span>.</Span>
</TextBlock>

görüntü açıklamasını buraya girin

Oldukça benzer başka unsur vardır Span, denir Run. RunEderken diğer satır içi elemanlarını içeremez Spancan, ancak kolayca yapabilirsiniz bağlamak için bir değişken Run'ın Textmülkiyet:

<TextBlock>
    Username: <Run FontWeight="Bold" Text="{Binding UserName}"/>
</TextBlock>

görüntü açıklamasını buraya girin

Ayrıca, isterseniz tüm biçimlendirmeyi arka koddan yapabilirsiniz:

TextBlock tb = new TextBlock();
tb.Inlines.Add("Sample text with ");
tb.Inlines.Add(new Run("bold") { FontWeight = FontWeights.Bold });
tb.Inlines.Add(", ");
tb.Inlines.Add(new Run("italic ") { FontStyle = FontStyles.Italic });
tb.Inlines.Add("and ");
tb.Inlines.Add(new Run("underlined") { TextDecorations = TextDecorations.Underline });
tb.Inlines.Add("words.");

44

Charles Petzolds Bool Uygulamasından bu örneği inceleyin = Kod + işaretleme

//----------------------------------------------
// FormatTheText.cs (c) 2006 by Charles Petzold
//----------------------------------------------
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Documents;

namespace Petzold.FormatTheText
{
    class FormatTheText : Window
    {
        [STAThread]
        public static void Main()
        {
            Application app = new Application();
            app.Run(new FormatTheText());
        }
        public FormatTheText()
        {
            Title = "Format the Text";

            TextBlock txt = new TextBlock();
            txt.FontSize = 32; // 24 points
            txt.Inlines.Add("This is some ");
            txt.Inlines.Add(new Italic(new Run("italic")));
            txt.Inlines.Add(" text, and this is some ");
            txt.Inlines.Add(new Bold(new Run("bold")));
            txt.Inlines.Add(" text, and let's cap it off with some ");
            txt.Inlines.Add(new Bold(new Italic (new Run("bold italic"))));
            txt.Inlines.Add(" text.");
            txt.TextWrapping = TextWrapping.Wrap;

            Content = txt;
        }
    }
}

7

iyi açıklamaları olan iyi bir site:

http://www.wpf-tutorial.com/basic-controls/the-textblock-control-inline-formatting/

burada yazar, aradığınız şey için size iyi örnekler veriyor! Genel olarak site araştırma materyalleri için harikadır, ayrıca WPF'de sahip olduğunuz birçok seçeneği kapsar

Düzenle

Metni biçimlendirmenin farklı yöntemleri vardır. temel bir biçimlendirme için (bence en kolayı):

    <TextBlock Margin="10" TextWrapping="Wrap">
                    TextBlock with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> text.
    </TextBlock>

Örnek 1, Kalın İtalik ile temel biçimlendirmeyi göstermektedir ve altı çizili metinle .

Aşağıdakiler, SPAN yöntemini içerir, bununla metni vurgulayabilirsiniz:

   <TextBlock Margin="10" TextWrapping="Wrap">
                    This <Span FontWeight="Bold">is</Span> a
                    <Span Background="Silver" Foreground="Maroon">TextBlock</Span>
                    with <Span TextDecorations="Underline">several</Span>
                    <Span FontStyle="Italic">Span</Span> elements,
                    <Span Foreground="Blue">
                            using a <Bold>variety</Bold> of <Italic>styles</Italic>
                    </Span>.
   </TextBlock>

Örnek 2, aralık işlevini ve bununla ilgili farklı olasılıkları göstermektedir.

Ayrıntılı bir açıklama için siteyi kontrol edin!

Örnekler


Bu bağlantı soruyu cevaplayabilirken, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse yalnızca bağlantı yanıtları geçersiz hale gelebilir. - Yorumdan
Richard Slater

1
@Mogsdad, kod örneklerini gösterecek şekilde gönderiyi düzenledi
Giellez

@RichardSlater, kodun örneklerini göstermesi için gönderiyi düzenledi
Giellez

0

Bu benim çözümüm ...

    <TextBlock TextWrapping="Wrap" Style="{DynamicResource InstructionStyle}"> 
        <Run Text="This wizard will take you through the purge process in the correct order." FontWeight="Bold"></Run>
        <LineBreak></LineBreak>
        <Run Text="To Begin, select" FontStyle="Italic"></Run>
        <Run x:Name="InstructionSection" Text="'REPLACED AT RUNTIME'" FontWeight="Bold"></Run>
        <Run Text="from the menu." FontStyle="Italic"></Run>
    </TextBlock>

Öğreniyorum ... bu yüzden yukarıdaki çözümle ilgili bir fikri olan varsa lütfen paylaşın! :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.