2011-06-16 50 views
19


這是我的綁定(縮短,命令屬性也必然)的StringFormat被忽略

<MenuItem Header="Key" CommandParameter="{Binding StringFormat='Key: {0}', Path=PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> 

ContectMenu的PlacementTarget的Tag-物業就像

"Short.Plural" 

我有什麼期望的String在命令處理程序中接收的是:

Key: Short.Plural 

但是我最初盟友接受的是:

Short.Plural 
+0

您是否將此值發送到命令Parameter? – 2011-06-16 09:57:31

回答

32

標籤不使用的StringFormat但ContentStringFormat。使用這種方式:

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

這是正確的答案。 :) – Philip 2013-02-01 00:02:33

+5

這應該被標記爲答案。另外對於一個MenuItem來格式化它的Header HeaderStringFormat – Viv 2013-03-14 07:44:43

23

我很驚訝,但我的測試中只顯示如果目標d-道具String類型是StringFormat才適用。我從來沒有注意到這一點,也沒有聽說過它提到。我現在沒有更多時間來研究它,但這看起來很荒謬。

嚴重的是,這個工程:

<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

+0

但commandparameter似乎無法識別stringformat或至少它不知道如何使用它,所以它只返回綁定中的值而不是stringformat的結果。 – kevindaub 2011-10-11 15:50:46

0

使用綁定轉換器:

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 \用戶控件資源:

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

好吧,這似乎是目前唯一的soloution ...我要使用轉換器,但與ConverterParameter =>「StringConcatenationConverter」 – Reini 2011-06-22 05:59:37

+1

@tabina的答案更適合這一點,因爲它不僅刪除要求額外的轉換器,但也有應用本地化的好處更容易 – Viv 2013-03-14 07:47:14