2013-04-20 113 views
0

我想CommandParameter是「9」而不是「_9」。格式化WPF中的CommandParameter字符串

<Button Content="_9" 
     Focusable="False" 
     Command="{Binding NumberPress}" 
     CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Content}" 
     Style="{DynamicResource NumberButton}" 
     Margin="92,134,92,129" /> 

我知道我可以只是做CommandParameter =「9」,但我想拉出一個樣式適用於多個按鈕。我曾嘗試使用StringFormat =但似乎無法使其工作。有沒有辦法做到這一點,而不訴諸代碼背後?

+0

這有點可怕,但你可以綁定到'Tag',而將Tag設置爲9,並將按鈕內容保留爲_9,不知道stringformat是否適用於命令參數(你會認爲它會。 ) – Charleh 2013-04-20 15:07:17

+0

我可能沒有正確使用StringFormat,你能告訴我在這種情況下它將如何完成嗎? – 2013-04-20 15:09:52

回答

0

如果您可以修改NumberPress引用的命令,那麼最簡單的解決方案就是解析命令參數以獲取編號。如果這不是一種選擇,那麼另一種解決方案是創建一個IValueConverter類並將其添加到CommandParameter綁定中。

<Button Content="_9" 
     Focusable="False" 
     Command="{Binding NumberPress}" 
     CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, 
       Path=Content, Converter={StaticResource NumberConverter}}" 
     Margin="92,134,92,129" /> 

實現:

public class NumberConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is string) 
     { 
      string strVal = ((string)value).TrimStart('_'); 
      int intVal; 
      if (int.TryParse(strVal, out intVal)) 
       return intVal; 
     } 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 
} 
2

如果「_」如您在您的評論提到的是景觀的嚴格一部分而已,那麼你的確可以使用Format屬性以獲取與出現的ContentContentStringFormat

這樣說:

<Button Margin="92,134,92,129" 
     Command="{Binding NumberPress}" 
     CommandParameter="{Binding Content, 
            RelativeSource={RelativeSource Self}}" 
     Content="9" 
     ContentStringFormat="_{0}" 
     Focusable="False" 
     Style="{DynamicResource NumberButton}" /> 

如果你有按鈕的Content綁定到一個值,你不必守在前面加上「_」有這樣的話。