在WPF中格式化CommandParameter字符串

时间:2013-04-20 15:01:09

标签: wpf visual-studio xaml

我希望CommandParameter为“9”而不是“_9”。

<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”,但我想拉出一个Style来应用于多个按钮。我已经尝试使用StringFormat =但似乎无法使其工作。有没有办法在不诉诸代码的情况下做到这一点?

2 个答案:

答案 0 :(得分:2)

如果您在评论中提及的“_”严格属于“仅查看”的一部分,那么您确实可以使用“格式”属性来Content ContentStringFormat显示该内容。

说出类似的话:

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

这样,如果您将Button的Content绑定到某个值,则不必在此处保留“_”。

答案 1 :(得分:0)

如果你可以修改NumberPress引用的Command,那么最简单的解决方案是在那里解析命令参数来获取数字。如果这不是一个选项,那么另一个解决方案是创建一个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;
    }
}