绑定来自wpf中的多个元素

时间:2010-06-21 11:06:59

标签: wpf binding

我有3个wpf控制名“A”“B”“C”。我想绑定C控件height

易于理解:C.Height=A.Height+B.Height

这是我的梦想。 :)

< C >
 < C.Height >
  < SumBinding >
    < Binding ElementName=A, Path=Height/ >
    < Binding ElementName=B, Path=Height/ >
  < /SumBinding >
 < /C.Height >
< /C >

怎么做?

是否可以不使用转换器?

否则可以像课程一样创建SumBinding吗?

1 个答案:

答案 0 :(得分:5)

您可以使用MultiBinding将属性绑定到多个绑定,但您需要使用实现IMultiValueConverter的转换器才能使用它们。在这种情况下,您可能希望绑定到Height而不是ActualHeight,以便在执行布局后获取值。

您可以定义这样的转换器:

public class SumConverter
    : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values.Cast<double>().Sum();
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return null;
    }
}

然后在XAML中执行类似的操作:

<Control Name="C">
    <Control.Resources>
        <local:SumConverter x:Key="SumConverter"/>
    </Control.Resources>
    <Control.Height>
        <MultiBinding Converter="{StaticResource SumConverter}">
            <Binding Path="ActualHeight" ElementName="A" />
            <Binding Path="ActualHeight" ElementName="B" />
        </MultiBinding>
    </Control.Height>
</Control>

如果您只是想让控件的高度彼此保持固定的比例,您可能希望使用具有星号大小的网格或具有共享大小组的多个网格。这样的事情可能有用:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="2*"/>
    </Grid.RowDefinitions>
    <Button Grid.Row="0">A</Button>
    <Button Grid.Row="1">B</Button>
    <Button Grid.Row="2">C</Button>
</Grid>