wpf xaml data-binding textblock

wpf - Agregar texto a un TextBlock enlazado



wpf templates (6)

Me gustaría agregar texto a los resultados que están vinculados a un bloque de texto:

<TextBlock Text="{Binding Title}" Foreground="#FFC8AB14" FontSize="28" />

El texto que se muestra es:

" My title "

Lo que quiero que se muestre es:

This is "My title"


El mejor enfoque aquí en términos de rendimiento , como ya se ha respondido, es utilizar StringFormat for Binding y asignarlo a la propiedad Text de TextBlock .

Sin embargo, si el rendimiento no es una preocupación, y se prefiere la legibilidad XAML, otro enfoque es usar Run dentro de TextBlock :

<TextBlock Foreground="#FFC8AB14" FontSize="28"> This is <Run Text="{Binding Title}" /> </TextBlock>

Además, de esta manera puede aplicar diferentes estilos (texto / color de fondo, letra cursiva / negrita, tamaño de fuente, etc.) a diferentes partes de su TextBlock , que es algo que no puede hacer con el StringFormat . Y esto es mucho más eficiente que tener múltiples TextBlock con diferentes estilos de texto / fondo.


Hola puedes escribir lo siguiente:

<TextBlock> <TextBlock>This is </TextBlock> <TextBlock Text="{Binding Title}"></TextBlock> </TextBlock>


Podrías hacer esto con un convertidor.

<TextBlock Text="{Binding Title, ConverterParameter=This is, Converter={StaticResource TextPrefixConverter}}" Foreground="#FFC8AB14" FontSize="28" />

El convertidor simplemente prefijaría el valor límite con el ConverterParameter.

public class TextPrefixConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { String result = String.Empty; if ( parameter != null) result = parameter.ToString( ); if (value != null) result += value.ToString( ); return result; } ... }

No es obvio que los espacios y / o las citas estén destinados a formar parte de la salida. Si es así, el convertidor podría cambiarse para recortar los espacios y / o agregar comillas a la cadena construida.

Otra forma de hacer esto es:

<TextBlock Foreground="#FFC8AB14" FontSize="28" > <Run Text="This is " /> <Run Text="{Binding Path=Title}" /> </TextBlock>



Si quieres hacerlo en el enlace:

<TextBlock Foreground="#FFC8AB14" FontSize="28"> <TextBlock.Text> <Binding Path="Title"> <Binding.StringFormat> This is "{0}" </Binding.StringFormat> </Binding> </TextBlock.Text> </TextBlock>

Sintaxis de elementos requerida para escapar de las comillas. Si las comillas donde solo se marca el texto insertado y no deben aparecer en la salida es mucho más fácil, por supuesto:

<TextBlock Text="{Binding Title, StringFormat={}This is {0}}" Foreground="#FFC8AB14" FontSize="28">


simplemente use StringFormat para propósitos de formato.

<TextBlock Text="{Binding Title,StringFormat=''This is {0}''}" Foreground="#FFC8AB14" FontSize="28" />