2011-02-09 6 views
19

Me estaba preguntando algo, y no pude encontrar ningún tema relevante. Tengo siguiente enlace:¿Es posible agregar más caracteres después de un enlace en xaml?

Content="{x:Static resx:Resource.Form_OtherOption_Description}" 

Esto colocará una cadena en una etiqueta. Lo que me preguntaba es si puedo agregar un ":" después de ese enlace, no en código, solo en xaml. La etiqueta representa algo así como "Nombre:". Pero agregar el ":" como parte del enlace no es una opción.

Editar

estoy trabajando en la versión 3.5

Cualquier sugerencia.

Gracias de antemano.

+0

Si está en 3.5, probablemente necesite usar la solución de @ H.B. – user7116

Respuesta

30

que podría lograr esto con algo como:

<TextBlock Text="{Binding Source={x:Static resx:Resource.Form_OtherOption_Description}, 
         StringFormat={}{0}:}" /> 

Editar:<Label> s Content propiedad no respeta la propiedad StringFormat de una unión aparentemente. Lo que he encontrado se ha movido a la propiedad ContentStringFormat en el <Label>.

<Label Content="{x:Static resx:Resource.Form_OtherOption_Description}" 
     ContentStringFormat="{}{0}:" /> 
+1

+1, vi que encontraste la respuesta también :) Así 'ContentControl' tiene' ContentStringFormat', 'HeaderedContentControl' tiene' HeaderStringFormat', y 'ItemsControl' tiene' ItemStringFormat'. Es bueno saber –

+1

Parece que 'Label.Content' no recoge el' StringFormat' del enlace porque el 'TargetType' no es' string', sino 'object'. En el caso de 'TextBlock.Text', el tipo de destino es' string' y, por lo tanto, se usa en el enlace. – user7116

+1

Buen lugar: aunque no tan elegante, puedes agregar un TextBlock al contenido de las etiquetas, pero esto sería una sobrecarga adicional. – Andrew

0

Puede crear un convertidor que tome la cadena de entrada y agregue el ":".

public class AddStringToStringConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string input = value as string; 
     string suffix = parameter as string; 

     return input + suffix; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

Xaml:

<Window.Resources> 
    <local:AddStringToStringConverter x:Key="AddStringToStringConverter"/> 
</Window.Resources> 
... 
<Label Text="{Binding Source={x:Static resx:Resource.Form_OtherOption_Description}, Converter={StaticResource AddStringToStringConverter}, ConverterParameter=:}"/> 

O algo por el estilo. Intenté y funcionó al menos para mi fuente.

Si tiene espacios en blanco y similares en usted ConverterParameter puede utilizar signle quotes para asegurarse de que no se eliminen.

Editar: Ah, claro ... sí ... también hay StringFormat que nunca he necesitado antes, ehehehe ...

3

try de unión propiedad StringFormat - que puede hacer muy fácilmente lo que quiere.

9

También puede utilizar MultiBinding con StringFormat por ejemplo:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="ID {0} Name: {1} Age: {2}"> 
      <Binding Source="{x:Static resx:SomeResx.ID}"/> 
      <Binding Path="Name"/> 
      <Binding Path="Age"/> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

Usted puede utilizar esto en un control de contenido TextBlock TextBlock.Text (lo siento, no pude conseguir el código para presentarse a esta por encima de)

+0

Según la respuesta sixlettervariables, la etiqueta usa un contentStringFormat. Para que las copias múltiples anteriores funcionen con una etiqueta, asigne TextBlock a su contenido. – Andrew

19

Si está utilizando WPF 4.0, también podría hacer esto:

<TextBlock> 
     <Run Text="{Binding SomeLabel}"/> 
     <Run Text=":"/> 
</TextBlock> 

esta realidad concatena las dos cadenas provenientes de dos etiquetas Run y las copia en la propiedad TextBlock.Text !.

Usando este enfoque, puede vincular a diferentes propiedades en el presentador y mostrarlo en un solo TexBlock.Ver este excelente ejemplo:

Can we concat two properties in data binding?

3

Sí se puede. Aquí agrego "pruebas" después del texto vinculante (clouds.all) en el teléfono de Windows.

<TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}testing}"/> 
1

si utiliza una etiqueta dentro de una barra de progreso que se puede utilizar de esta manera:

<Label x:Name="Progress" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" Foreground="White" Opacity=".7" 
     Content="{Binding Path=Value, RelativeSource={RelativeSource TemplatedParent}}" ContentStringFormat="{}{0}%"> 

de esta manera se puede visualizar el valor de progressbar con un% añadido.

Cuestiones relacionadas