2009-02-03 21 views
24

Tengo un control TextBlock con datos (que se está utilizando dentro de una DataTemplate para mostrar elementos en un ListBox) y quiero poner todo el texto en el control en negrita. Parece que no puedo encontrar una propiedad en el explorador de propiedades para configurar todo el texto en negrita, y todo lo que puedo encontrar en línea es el uso de la etiqueta <Bold> dentro de TextBlock, pero no puedo ponerlo como los datos están viniendo directamente de la fuente de datos.Establecer TextBlock para que sea completamente negrita cuando DataBound en WPF

Debe haber una manera de hacer esto, pero ¿cómo? Soy muy inexperto en WPF, así que no sé dónde mirar.

Respuesta

69

¿Me falta algo, o solo necesita establecer la propiedad FontWeight en "Negrita"?

<TextBlock FontWeight="Bold" Text="{Binding Foo}" /> 
+0

¡Gracias! Eso funciona. Sin embargo, lo mismo no funciona con FontWeight de Italic. ¿Hay alguna manera similarmente fácil de hacer cursiva? – robintw

+6

¡Claro! Estilo de fuente. Consulte http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.fontstyle.aspx –

0

Usted dice que los datos provienen directamente de la fuente de datos; ¿es posible colocar una capa de abstracción delante de él? Es bastante común crear una Vista para lo que se muestra, y hacer que la Vista se comunique con los datos. La implementación más común de esta idea es Model View View-Model (MVVM). Lea sobre esto en línea.

Puede tener una propiedad 'DisplayText' vinculada al cuadro de texto, y es simplemente un 'getter' que envuelve el texto subyacente. Puede detectar si el texto ya está envuelto y si no, envuélvalo.

Por ejemplo.

public class TestView { 
    private Test datasource; 
    public TestView(Test source) 
    { 
    this.datasource = source; 
    } 

    public string DisplayText { 
    get { 
     if (datasource.Text.Contains("<bold>")==false) { 
      return "<bold>" + datasource.Text + "</bold>"; 
     } 
     return datasource.Text; 
    } 
    } 
} 

A continuación, realice el enlace a la Vista en lugar de directamente al objeto.

2

En lugar de sólo tener un TextBlock, intente esto:

<TextBlock> 
    <Bold> 
    <Run /> 
    </Bold> 
</TextBlock> 

Entonces databind a la Run.TextProperty lugar.

+1

¿cuál es la ventaja? – nicolas

+0

Si bien la pregunta original preguntó cómo configurar todo el bloque para que sea negrita, esto es útil si desea que ciertas partes del texto sean negritas, suponiendo que los elementos son elementos separados a los que se puede vincular. –

Cuestiones relacionadas