2011-03-10 25 views
80

¿Cómo logro el formateo de un texto dentro de un control TextBlock en mi aplicación WPF?Formatear texto en un TextBlock

por ejemplo: Me gustaría tener ciertas palabras en negrita, otros en cursiva, y algunos en diferentes colores, como en este ejemplo:

enter image description here

La razón detrás de mi pregunta es la siguiente problema real:

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

me gustaría que la segunda parte de la cadena a ser audaz, y sé que podría utilizar dos controles (etiquetas, bloques de texto, etc.), pero preferiría no hacerlo, debido la gran cantidad de controles ya en uso.

Respuesta

106

Es necesario utilizar 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 la unión:

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

También puede obligar a 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 enlazar a través de convertidores si tiene negrita como un booleano (decir).

37

Salida este ejemplo de Charles Petzolds Bool aplicación = Código + marcado

//---------------------------------------------- 
// 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; 
     } 
    } 
} 
77

Usted puede hacer esto en XAML con bastante facilidad:

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

¡Maravilloso! No tenía idea de que XAML admitiera tales constructos. –

+3

¿esto es compatible con el enlace? –

+7

@ArsenMkrt Qué tal: Aetherix

34

Hay varios Inline elementos que pueden ayudar a usted, para obtener 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> 

enter image description here

creo que vale la pena destacar, que estos elementos son, de hecho, sólo abreviaturas de Span elementos con diferentes propiedades establecidas (es decir .: para Bold, la propiedad se establece en FontWeightFontWeights.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 otros) los Foreground o la Background propiedades:

<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

El elemento Span también pueden contener otros elementos como esto:

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

enter image description here

Hay es otro elemento, que es bastante similar a Span, se llama Run. El Run no puede contener otros elementos en línea, mientras que el Span puede, pero puede unirse fácilmente a una variable a la Run 's Text propiedad:

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

enter image description here

Además, se puede hacer todo el formato de código- detrás, 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."); 
4

un buen sitio, con buenas explicaciones:

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

aquí el autor le da un buen ejemplo de lo que usted está buscando! Overal el sitio es ideal para material de investigación además de que cubre una gran cantidad de opciones que tiene en WPF

Editar

Existen diferentes métodos para dar formato al 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> 

Ejemplo 1 muestra el formato básico con NegritaItallic y subrayado de texto.

Siguiendo el método incluye SPAN, con este texto que van más destacado:

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

Ejemplo 2 muestra la función de intervalo y las diferentes posibilidades con ella.

Para obtener una explicación detallada, consulte el sitio.

Examples

+0

Mientras que este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcione el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [crítica] (/ revisión/de baja calidad postes/12244274) –

+1

@Mogsdad Editted el cargo por lo que muestra ejemplos de código – Giellez

+0

@RichardSlater Editted el cargo por lo que muestra ejemplos de código – Giellez