2011-07-15 17 views
12

¿Hay alguna manera de hacer esto en una expresión de enlace:WPF vinculante dentro texto literal

Text="Hello {Binding CurrentUser}" 

es decir:

<TextBlock HorizontalAlignment="Right" Foreground="#3163AB" Margin="0,0,0,5" 
    FontWeight="Bold" Text="Hello {Binding CurrentUser}" /> 

Obviamente, podría romperlo a cabo en dos bloques de texto separados, pero esto ser mucho mejor.

+0

¿Por qué no se divide en 2 controles, uno con texto "Hello" estático y otro con {CurrentUser} encuadernado? El segundo justo delante del primero, obviamente. – Tigran

+1

@Tigran: por ejemplo, para localización. – Vlad

+0

Pensé en eso, pero luego tendría que tener ambos bloques de texto en otro stackPanel horizontal para ponerlos uno al lado del otro, por lo que usar strongFormat como las respuestas a continuación se muestran debería ser mucho más simple. –

Respuesta

15

A partir de .NET 4, la propiedad Text de Run se puede enlazar. Yo lo uso todo el tiempo:

<TextBlock> 
    Hello 
    <Run Text="{Binding CurrentUser}" />, 
    how are you? 
</TextBlock> 

El método StringFormat es agradable, pero el uso de una carrera con una unión permite el uso del valor convertidores.

+0

Es bueno saberlo, especialmente con ValueConverters: gracias. –

+0

Sé que podría probarlo yo mismo, pero no tengo instaladas las herramientas SL ... ¿está disponible '' en Silverlight 4 también? –

+0

Parece ser! http://msdn.microsoft.com/en-us/library/system.windows.documents.run(v=vs.95).aspx – Ross

8

Está buscando el StringFormat propiedad de Binding.

Text="{Binding CurrentUser, StringFormat=Hello {0}}" 
+0

+1 muchas gracias –

5
Text="{Binding CurrentUser, StringFormat=Hello {0}}" 

debe hacer.

+0

Estaba a punto de corregirlo como 'Hola {0}', pero parece que me ganaste. Gracias por la gran respuesta. –

+0

¡De nada! – Vlad

Cuestiones relacionadas