StringFormat is ignored StringFormat is ignored wpf wpf

StringFormat is ignored


Label does not use StringFormat but ContentStringFormat. Use it this way:

<TextBlock x:Name="textBlock" Text="Base Text"/><Label Content="{Binding Path=Text, ElementName=textBlock}" ContentStringFormat="FORMATTED {0}"/>


I'm astounded, but my tests just show that StringFormat only applies if the target d-prop is of type String. I've never noticed this before, nor heard it mentioned. I don't have more time to look into it right now, but this seems ridiculous.

Seriously, this works:

<TextBlock x:Name="textBlock" Text="Base Text"/><TextBlock Text="{Binding StringFormat=FORMATTED {0}, Path=Text, ElementName=textBlock}"/>

This does not:

<TextBlock x:Name="textBlock" Text="Base Text"/><Label Content="{Binding StringFormat=FORMATTED {0}, Path=Text, ElementName=textBlock}"/>

Since Label.Content is not a String.


use Binding Converter:

public class CommandParamConverter : IValueConverter{    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)    {        if (value is string)        {            return string.Format("Key {0}", value);        }        return value;    }    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)    {        throw new NotImplementedException();    }}

Add it to Windows\UserControl resource:

<Window.Resources>    <local:CommandParamConverter x:Key="commandParamConverter" /></Window.Resources>

Refer it in Menu CommandParameter binding:

<MenuItem Header="Key" CommandParameter="{Binding Converter={StaticResource commandParamConverter}, Path=PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>