Memformat teks dalam TextBlock

104

Bagaimana cara mencapai pemformatan teks di dalam TextBlockkontrol di aplikasi WPF saya?

misalnya: Saya ingin kata-kata tertentu dicetak tebal, kata-kata lain dicetak miring, dan beberapa kata dalam warna berbeda, seperti contoh ini:

masukkan deskripsi gambar di sini

Alasan di balik pertanyaan saya adalah masalah sebenarnya ini:

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

Saya ingin bagian kedua dari string menjadi tebal, dan saya tahu bahwa saya dapat menggunakan dua kontrol (Labels, TextBlocks, dll.) Tetapi saya lebih suka tidak melakukannya, karena banyaknya kontrol yang sudah digunakan.

Abu
sumber

Jawaban:

139

Anda perlu menggunakan 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>

Dengan mengikat:

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

Anda juga dapat mengikat properti lainnya:

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

Anda dapat mengikat melalui konverter jika Anda memiliki huruf tebal sebagai boolean (katakanlah).

ChrisF
sumber
98

Anda dapat melakukan ini di XAML dengan cukup mudah:

<TextBlock>
  Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
</TextBlock>
Ashley Davis
sumber
Hebat! Saya tidak tahu XAML mendukung konstruksi seperti itu.
Allon Guralnek
6
apakah dukungan ini mengikat?
Arsen Mkrtchyan
11
@ArsenMkrt Bagaimana dengan: <TextBlock FontWeight = "Bold" Text = "{Binding Budget}" />
Aetherix
2
@Aetherix Saya tidak bisa membuatnya bekerja. Saya menggunakan ini dari qqbenq: <TextBlock> Pembayaran bulanan <Bold> £ </Bold> <Run FontWeight = "Bold" Text = "{Binding MonthlyPayment}" /> </TextBlock>
Gail Foad
49

Ada berbagai Inlineelemen yang dapat membantu Anda, untuk opsi pemformatan paling sederhana yang dapat Anda gunakan Bold, Italicdan Underline:

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

masukkan deskripsi gambar di sini

Saya pikir perlu dicatat, bahwa elemen-elemen itu sebenarnya hanyalah singkatan dari Spanelemen - elemen dengan berbagai set properti (yaitu: untuk Bold, FontWeightproperti disetel ke FontWeights.Bold).

Ini membawa kita ke opsi berikutnya: Spanelemen yang disebutkan di atas .

Anda dapat mencapai efek yang sama dengan elemen ini seperti di atas, tetapi Anda diberikan lebih banyak kemungkinan; Anda dapat mengatur (antara lain) Foregroundatau Backgroundproperti:

<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>

masukkan deskripsi gambar di sini

The Spanelemen juga mungkin mengandung unsur-unsur lain seperti ini:

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

masukkan deskripsi gambar di sini

Ada elemen lain, yang sangat mirip Span, disebut Run. The Runtidak dapat berisi elemen inline lain sementara Spankaleng, tetapi Anda dapat dengan mudah mengikat variabel ke Run's Textproperti:

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

masukkan deskripsi gambar di sini

Selain itu, Anda dapat melakukan seluruh pemformatan dari di belakang kode jika Anda lebih suka:

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.");
qqbenq.dll
sumber
44

Lihat contoh ini dari Charles Petzolds Bool Application = Code + markup

//----------------------------------------------
// 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;
        }
    }
}
Wegged
sumber
7

situs yang bagus, dengan penjelasan yang bagus:

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

di sini penulis memberikan contoh yang baik untuk apa yang Anda cari! Secara keseluruhan, situs ini bagus untuk bahan penelitian dan mencakup banyak opsi yang Anda miliki di WPF

Edit

Ada beberapa metode berbeda untuk memformat teks. untuk pemformatan dasar (yang paling mudah menurut saya):

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

Contoh 1 menunjukkan pemformatan dasar dengan Bold Itallic dan teks garis bawah.

Berikut ini termasuk metode SPAN, dengan teks highlight Anda van ini:

   <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>

Contoh 2 menunjukkan fungsi span dan kemungkinan yang berbeda dengannya.

Untuk penjelasan rinci, periksa situsnya!

Contoh

Giellez
sumber
Meskipun tautan ini mungkin menjawab pertanyaan, lebih baik menyertakan bagian penting dari jawaban di sini dan menyediakan tautan untuk referensi. Jawaban link saja bisa menjadi tidak valid jika halaman tertaut berubah. - Dari Ulasan
Richard Slater
1
@Mogsdad mengedit postingan tersebut sehingga menampilkan contoh kode
Giellez
@RichardSlater mengedit postingan tersebut sehingga menampilkan contoh kode
Giellez
0

Ini solusi saya ....

    <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>

Saya sedang belajar ... jadi jika ada yang tahu tentang solusi di atas, silakan bagikan! :)

Rory Scanlan
sumber