WPF / Silverlight:我可以轻松修改我绑定的属性吗?

时间:2011-03-23 18:02:35

标签: wpf silverlight xaml

例如:

 Width={Binding MyWidth}

我想这样做:

 Width={Binding MyWidth/2}

这不起作用......我想知道是否有简单的方法来做到这一点。 (无需编写转换器,也无需更改或创建新属性)

注意:不一定是Width ..我在谈论一般的属性

由于

3 个答案:

答案 0 :(得分:3)

不,你不能。

你必须写一个valueconverter。您唯一能做的就是使用formatstring来更改格式。

但你可以编写一个多用途转换器,你可以给出一个参数 - 它甚至可以是你发明的某种脚本,所以你可以将它用于各种场景,比如你的部门。

答案 1 :(得分:2)

我不久前不得不这样做。像Rune所说,我需要写一个转换器。如果你愿意,你可以使用我的。

使用示例:

Width="{Binding Width, Converter={StaticResource DoubleOffsetConverter}, ConverterParameter=50%}"

而且,这是转换器。您的问题似乎只需要单向转换,但我认为如果必要的话,实现ConvertBack以使其成为双向的并不会太难。

public class DoubleOffsetConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
            double valueDouble = System.Convert.ToDouble(value);

            if (parameter != null)
            {
                string paramString = parameter.ToString();
                double paramDouble;
                if (paramString.EndsWith("%"))
                {
                    //
                    // Multiply by the percentage.
                    //
                    if (double.TryParse(paramString.Substring(0, paramString.Length - 1), out paramDouble))
                    {
                        return valueDouble * paramDouble / 100.0;
                    }
                }
                else if (double.TryParse(parameter.ToString(), out paramDouble))
                {
                    //
                    // Add the offset.
                    //
                    return valueDouble + paramDouble;
                }

            }
        }

        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

答案 2 :(得分:1)

绝对不是在Silverlight中,你所写的唯一选择是转换器或新属性。

编辑:刚刚检查过,即使使用WPF似乎也不可能,使用本文作为参考:http://www.codeproject.com/KB/WPF/WpfDataBinding1.aspx