【问题标题】:How do I create a binding that involves some sort of formula?如何创建涉及某种公式的绑定?
【发布时间】:2009-12-02 05:01:37
【问题描述】:

举个例子,如果我有一个元素的大小我想是另一个元素大小的两倍,我该如何实现呢?

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

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

在其他情况下,我可能希望绑定的属性可能是其他元素的宽度之和,我该如何实现呢?

解决方案

请参考我的回答,了解 lenanovd 的回答所帮助的解决方案。

【问题讨论】:

    标签: .net wpf xaml binding


    【解决方案1】:

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

    希望对你有帮助。

    【讨论】:

    • 太棒了,感谢您提供的 levanovd,我刚刚创建了一个转换器,并将为我的问题添加解决方案,以防其他人希望绑定到其他界面元素。
    【解决方案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 绑定到另一个属性,不确定为什么存在这种限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      相关资源
      最近更新 更多