Định dạng văn bản trong TextBlock


104

Làm cách nào để định dạng văn bản bên trong TextBlockđiều khiển trong ứng dụng WPF của tôi?

ví dụ: Tôi muốn có một số từ được in đậm, những từ khác được in nghiêng và một số từ có màu sắc khác nhau, như ví dụ sau:

nhập mô tả hình ảnh ở đây

Lý do đằng sau câu hỏi của tôi là vấn đề thực tế này:

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

Tôi muốn phần thứ hai của chuỗi được in đậm và tôi biết rằng tôi có thể sử dụng hai điều khiển (Nhãn, Khóa văn bản, v.v.) nhưng tôi không muốn, do có rất nhiều điều khiển đã được sử dụng.

Câu trả lời:


139

Bạn cần sử dụng 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>

Với ràng buộc:

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

Bạn cũng có thể liên kết các thuộc tính khác:

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

Bạn có thể liên kết thông qua trình chuyển đổi nếu bạn có in đậm dưới dạng boolean (giả sử).


98

Bạn có thể thực hiện việc này trong XAML một cách dễ dàng:

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

Tuyệt vời! Tôi không biết XAML hỗ trợ các cấu trúc như vậy.
Allon Guralnek

6
điều này có hỗ trợ ràng buộc không?
Arsen Mkrtchyan

11
@ArsenMkrt Thế còn: <TextBlock FontWeight = "Bold" Text = "{Binding Budget}" />
Aetherix

2
@Aetherix Tôi không thể làm cho điều đó hoạt động. Tôi đã sử dụng cái này từ qqbenq: <TextBlock> Khoản hoàn trả hàng tháng của <Bold> £ </Bold> <Run FontWeight = "Bold" Text = "{Binding MonthlyPayment}" /> </TextBlock>
Gail Foad

49

Có nhiều Inlineyếu tố khác nhau có thể giúp bạn, đối với các tùy chọn định dạng đơn giản nhất mà bạn có thể sử dụng Bold, ItalicUnderline:

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

nhập mô tả hình ảnh ở đây

Tôi nghĩ điều đáng chú ý là những phần tử đó thực chất chỉ là viết tắt của Spancác phần tử có các thuộc tính khác nhau được đặt (ví dụ: for Bold, thuộc FontWeighttính được đặt thành FontWeights.Bold).

Điều này đưa chúng ta đến tùy chọn tiếp theo: Spanyếu tố đã nói ở trên .

Bạn có thể đạt được các hiệu ứng tương tự với phần tử này như trên, nhưng bạn còn được cấp nhiều khả năng hơn; bạn có thể đặt (trong số những người khác) Foregroundhoặc các Backgroundthuộc tính:

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

nhập mô tả hình ảnh ở đây

Phần Spantử cũng có thể chứa các phần tử khác như sau:

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

nhập mô tả hình ảnh ở đây

Có một yếu tố khác, khá giống với Span, nó được gọi là Run. Các Runkhông thể chứa các thành phần inline khác trong khi Spancó thể, nhưng bạn có thể dễ dàng ràng buộc một biến đến Run's Texttài sản:

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

nhập mô tả hình ảnh ở đây

Ngoài ra, bạn có thể thực hiện toàn bộ định dạng từ mã phía sau nếu bạn muốn:

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

Kiểm tra ví dụ này từ Ứng dụng Charles Petzolds Bool = Mã + đánh dấu

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

một trang web tốt, với những lời giải thích hay:

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

ở đây tác giả cung cấp cho bạn những ví dụ điển hình cho những gì bạn đang tìm kiếm! Nói chung, trang web rất tuyệt vời cho tài liệu nghiên cứu cộng với nó bao gồm rất nhiều tùy chọn bạn có trong WPF

Biên tập

Có nhiều phương pháp khác nhau để định dạng văn bản. để có định dạng cơ bản (theo tôi là dễ nhất):

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

Ví dụ 1 cho thấy định dạng cơ bản với Bold Itallic và văn bản gạch dưới.

Sau đây bao gồm phương thức SPAN, với phương thức này, bạn đánh dấu văn bản:

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

Ví dụ 2 cho thấy hàm span và các khả năng khác nhau với nó.

Để có lời giải thích chi tiết, hãy kiểm tra trang web!

Ví dụ


Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. - Từ đánh giá
Richard Slater

1
@Mogsdad đã chỉnh sửa bài đăng để nó hiển thị các ví dụ về mã
Giellez

@RichardSlater đã chỉnh sửa bài đăng để nó hiển thị các ví dụ về mã
Giellez

0

Đây là giải pháp của tôi ....

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

Tôi đang học ... vì vậy nếu ai có ý kiến ​​về giải pháp trên xin vui lòng chia sẻ! :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.