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>
Puedes usar la propiedad StringFormat
del enlace:
<TextBlock Text="{Binding Title, StringFormat=This is {0}}"></TextBlock>
Echa un vistazo a esta publicación del blog para obtener más información: WPF String.Format en XAML con el atributo StringFormat .
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" />