0

我希望 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" 但我想提取一个样式以应用于多个按钮。我尝试过使用 StringFormat= 但似乎无法使其工作。有没有办法在不求助于代码的情况下做到这一点?

4

2 回答 2

2

如果您在评论中提到的“_”严格来说只是 View 的一部分,那么您确实可以使用 Format 属性来让它出现在Contentwith 中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}" />

这样,如果您将 ButtonContent绑定到某个值,则不必继续在此处添加“_”。

于 2013-04-20T23:06:19.127 回答
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;
    }
}
于 2013-04-20T16:38:25.140 回答