2011-03-23 52 views
1

例如:WPF/Silverlight的:我可以很容易地修改,我绑定的属性?

Width={Binding MyWidth} 

我想要做的:

Width={Binding MyWidth/2} 

这不工作...我不知道是否有这样做的容易方式。 (无需编写一个转换器,并在不改变或创建一个新属性)

注意:不一定是宽..我一般

感谢

谈论性
+0

取决于其他因素,scaletransform可能是一个选项 – agradl 2011-03-23 18:11:20

+0

哦,我多么希望这是可能的! :d – Laith 2011-03-23 22:26:11

回答

3

你就是不行。

你必须写一个valueconverter。你唯一能做的就是使用格式字符串来改变格式。

但你可以写一个多功能转换器,你可以给一个参数 - 它甚至可能是某种脚本你发明,所以你可以使用它的各种场景,喜欢你的部门。

2

其实我不得不做此前不久。像符文说的,我需要写一个转换器。如果你愿意,你可以使用我的。

用法示例:这里

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(); 
    } 
} 
相关问题