www org mapwingis mapwindows mapwindow espaƱol c# wpf wpf-controls

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!

Examples