wake-up-neo.com

Formatieren von Text in einem TextBlock

Wie erreiche ich die Formatierung eines Textes in einem TextBlock-Steuerelement in meiner WPF-Anwendung?

beispiel: Ich möchte bestimmte Wörter in Fettschrift, andere in Kursivschrift und einige in verschiedenen Farben, wie dieses Beispiel:

enter image description here

Der Grund für meine Frage ist dieses Problem:

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

Ich möchte, dass der zweite Teil der Zeichenfolge fett ist, und ich weiß, dass ich zwei Steuerelemente verwenden kann (Labels, TextBlocks usw.), aber ich möchte dies nicht tun, da es eine Unmenge an Kontrollen gibt.

87
Ash

Sie müssen Inlines verwenden:

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

Mit Bindung:

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

Sie können auch die anderen Eigenschaften binden:

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

Sie können über Konverter binden, wenn Sie als Boolean fett sind (etwa).

117
ChrisF

Sie können dies in XAML leicht genug tun:

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

Sehen Sie sich dieses Beispiel von Charles Petzolds Bool Application = Code + Markup an

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

Es gibt verschiedene Inline -Elemente, die Ihnen helfen können. Für die einfachsten Formatierungsoptionen können Sie Bold , Italic und Underline verwenden:

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

enter image description here

Ich denke, es ist erwähnenswert, dass diese Elemente in der Tat nur Abkürzungen für Span Elemente mit verschiedenen gesetzten Eigenschaften sind (d. H .: für Bold ist die FontWeight-Eigenschaft auf FontWeights.Bold eingestellt).

Dies bringt uns zu unserer nächsten Option: dem bereits erwähnten Element Span .

Mit diesem Element können Sie die gleichen Effekte wie oben erzielen, Sie erhalten jedoch noch mehr Möglichkeiten. Sie können unter anderem die Eigenschaften Foreground oder Background einstellen:

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

enter image description here

Das Span-Element kann auch andere Elemente wie diese enthalten:

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

enter image description here

Es gibt ein anderes Element, das Span ziemlich ähnlich ist. Es heißt Run . Die Variable Run darf keine anderen Inline-Elemente enthalten, während die Variable Span es kann. Sie können jedoch eine Variable problemlos an die Eigenschaft Run der Variable Text binden:

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

enter image description here

Sie können auch die gesamte Formatierung von Code-Behind durchführen, wenn Sie möchten:

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.");
39
qqbenq

eine gute Seite mit guten Erklärungen:

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

hier gibt der Autor gute Beispiele für das, wonach Sie suchen! Die Website eignet sich hervorragend für Forschungsmaterial und deckt viele Optionen ab, die Sie in WPF haben

Bearbeiten

Es gibt verschiedene Methoden, um den Text zu formatieren. für eine grundlegende Formatierung (die einfachste meiner Meinung nach):

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

Beispiel 1 zeigt die grundlegende Formatierung mit Bold _ ​​Itallic und unterstrichenen Text.

Dazu gehört die SPAN-Methode, mit der Sie den Text hervorheben können:

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

Beispiel 2 zeigt die Bereichsfunktion und die damit verbundenen unterschiedlichen Möglichkeiten.

Eine ausführliche Erklärung finden Sie auf der Website!

Beispiele

7
Giellez

Das ist meine Lösung ....

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

Ich lerne ... also, wenn jemand Gedanken zu der obigen Lösung hat, bitte teilen! :)

0
Rory Scanlan