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:
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.
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).
Sie können dies in XAML leicht genug tun:
<TextBlock>
Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
</TextBlock>
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;
}
}
}
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>
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>
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>
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>
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.");
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!
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! :)