如何创建涉及某种公式的绑定?

时间:2009-12-02 05:01:38

标签: .net wpf xaml binding

作为一个例子,如果我有一个元素,其大小我希望是另一个元素的两倍大小,我将如何实现这一目标?

以下是一个例子,mirroredObject是我想要使用它的一半宽度作为Border对象宽度的对象。

<Border Width="{Binding ActualWidth, ElementName=mirroredObject, Mode=Default}" />

我还有其他情况,我可能想要绑定的属性可能是其他元素宽度的总和,我怎么能实现这个呢?

请参阅我的答案,以获得lenanovd的回答所帮助的解决方案。

2 个答案:

答案 0 :(得分:6)

您可以使用使用公式将int转换为另一个int的绑定转换器。例如,绑定转换器请阅读this文章。

希望它有所帮助。

答案 1 :(得分:2)

感谢levanovd提供了如何解决此问题的提示。以下是我解决这个问题的方法,再次感谢levanovd。

创建转换器

[ValueConversion(typeof(double), typeof(double))]
public class MultiplierConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        if (targetType != typeof(Double))
            throw new Exception("Conversion not allowed.");
        double f, m = (double)value;
        string par = parameter as string;
        if (par == null || !Double.TryParse(par, out f)) f = 1;
        return m * f;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        if (targetType != typeof(Double))
            throw new Exception("Conversion not allowed.");
        double f, m = (double)value;
        string par = parameter as string;
        if (par == null || !Double.TryParse(par, out f)) f = 1;
        return f == 0 ? float.NaN : m / f;
    }
}

将转换器添加到您的XAML

<Window.Resources>
  <n:MultiplierConverter x:Key="MultiplierConverter"/>
</Window.Resources>

在指定乘数参数的对象之间添加绑定。

<StackPanel>
  <Rectangle x:Name="source" Width="100" Height="100" Stroke="Black"/>
  <Rectangle Width="100" Stroke="Black"
             Height="{Binding ActualWidth, ElementName=source, Mode=Default,
                              Converter={StaticResource MultiplierConverter},
                              ConverterParameter=2}"/>
</StackPanel>

现在第二个矩形将是第一个矩形的两倍,可以使用ConverterParameter进行调整。遗憾的是,您无法将ConverterParameter绑定到另一个属性,因此不确定存在该限制的原因。