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}}"/>