这是我的绑定(缩写,Command-Property也绑定)
<MenuItem Header="Key" CommandParameter="{Binding StringFormat='Key: {0}', Path=PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
ContectMenu的PlacementTarget的Tag属性是一个类似
的字符串"Short.Plural"
我希望在Command-Handler中收到的是:
Key: Short.Plural
但我真正得到的是:
Short.Plural
答案 0 :(得分:32)
Label不使用StringFormat而是使用ContentStringFormat。以这种方式使用它:
<TextBlock x:Name="textBlock" Text="Base Text"/>
<Label Content="{Binding Path=Text, ElementName=textBlock}" ContentStringFormat="FORMATTED {0}"/>
答案 1 :(得分:24)
我很震惊,但我的测试表明StringFormat
仅适用于目标d-prop类型为String
的情况。我以前从未注意到这一点,也没有听到过它。我现在没有更多的时间来研究它,但这看起来很荒谬。
说真的,这有效:
<TextBlock x:Name="textBlock" Text="Base Text"/>
<TextBlock Text="{Binding StringFormat=FORMATTED {0}, Path=Text, ElementName=textBlock}"/>
这不是:
<TextBlock x:Name="textBlock" Text="Base Text"/>
<Label Content="{Binding StringFormat=FORMATTED {0}, Path=Text, ElementName=textBlock}"/>
由于Label.Content
不是String
。
答案 2 :(得分:0)
使用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();
}
}
将其添加到Windows \ UserControl资源:
<Window.Resources>
<local:CommandParamConverter x:Key="commandParamConverter" />
</Window.Resources>
在菜单CommandParameter绑定中引用它:
<MenuItem Header="Key" CommandParameter="{Binding Converter={StaticResource commandParamConverter}, Path=PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>