例如:
Width={Binding MyWidth}
我想这样做:
Width={Binding MyWidth/2}
这不起作用......我想知道是否有简单的方法来做到这一点。 (无需编写转换器,也无需更改或创建新属性)
注意:不一定是Width ..我在谈论一般的属性
由于
答案 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