c# - org - Formatear texto en un TextBlock
mapwindows 5 (5)
Hay varios elementos en Inline
que pueden ayudarlo, para las opciones de formato más simples puede usar Bold
, Italic
y Underline
:
<TextBlock>
Sample text with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> words.
</TextBlock>
Creo que vale la pena señalar que esos elementos son, de hecho, abreviados para los elementos de Span
con varios conjuntos de propiedades (es decir, para Bold
, la propiedad FontWeight
se establece en FontWeights.Bold
).
Esto nos lleva a nuestra siguiente opción: el elemento Span
antes mencionado.
Puede lograr los mismos efectos con este elemento que el anterior, pero se le otorgan aún más posibilidades; puede establecer (entre otras) las propiedades de Foreground
o de Background
:
<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>
El elemento Span
también puede contener otros elementos como este:
<TextBlock>
<Span FontStyle="Italic">Italic <Span Background="Yellow">text</Span> with some <Span Foreground="Blue">coloring</Span>.</Span>
</TextBlock>
Hay otro elemento, que es bastante similar a Span
, se llama Run
. La Run
no puede contener otros elementos en línea mientras que el Span
puede, pero puede vincular fácilmente una variable a la propiedad del Text
Run
:
<TextBlock>
Username: <Run FontWeight="Bold" Text="{Binding UserName}"/>
</TextBlock>
Además, puede hacer todo el formateo desde código subyacente si lo prefiere:
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.");
¿Cómo logro el formateo de un texto dentro de un control TextBlock
en mi aplicación WPF?
Por ejemplo: me gustaría tener ciertas palabras en negrita, otras en cursiva, y algunas en diferentes colores, como este ejemplo:
La razón detrás de mi pregunta es este problema real:
lblcolorfrom.Content = "Colour From: " + colourChange.ElementAt(3).Value.ToUpper();
Me gustaría que la segunda parte de la cadena sea audaz, y sé que podría usar dos controles (Etiquetas, TextBlocks, etc.) pero preferiría no hacerlo, debido a la gran cantidad de controles que ya están en uso.
Necesitas usar 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>
Con enlace:
<TextBlock.Inlines>
<Run FontWeight="Bold" FontSize="14" Text="{Binding BoldText}" />
<Run FontStyle="Italic" Foreground="Red" Text="{Binding ItalicText}" />
</TextBlock.Inlines>
También puede enlazar las otras propiedades:
<TextBlock.Inlines>
<Run FontWeight="{Binding Weight}"
FontSize="{Binding Size}"
Text="{Binding LineOne}" />
<Run FontStyle="{Binding Style}"
Foreground="Binding Colour}"
Text="{Binding LineTwo}" />
</TextBlock.Inlines>
Puede vincular a través de convertidores si tiene negrita como booleano (por ejemplo).
Puedes hacer esto en XAML con la suficiente facilidad:
<TextBlock>
Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
</TextBlock>
Vea este ejemplo de 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;
}
}
}
un buen sitio, con buenas explicaciones:
http://www.wpf-tutorial.com/basic-controls/the-textblock-control-inline-formatting/
¡aquí el autor te da buenos ejemplos de lo que estás buscando! En general, el sitio es ideal para material de investigación y además cubre una gran cantidad de opciones que tiene en WPF
Editar
Hay diferentes métodos para formatear el texto. para un formato básico (el más fácil en mi opinión):
<TextBlock Margin="10" TextWrapping="Wrap">
TextBlock with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> text.
</TextBlock>
El Ejemplo 1 muestra el formato básico con Bold Itallic y el texto subrayado.
A continuación se incluye el método SPAN, con este texto resaltado:
<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>
El ejemplo 2 muestra la función span y las diferentes posibilidades con ella.
Para una explicación detallada, ¡revise el sitio!