WPF将一个元素的高度与3个元素高度之和绑定

本文关键字:高度 元素 3个 绑定 一个 WPF | 更新日期: 2023-09-27 18:00:09

有没有办法将3个元素的高度绑定到1个元素的身高上?

WPF将一个元素的高度与3个元素高度之和绑定

您可以使用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>