代码之家  ›  专栏  ›  技术社区  ›  ebattulga

从WPF中的多个元素绑定

  •  1
  • ebattulga  · 技术社区  · 15 年前

    I have 3 wpf control name "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 回复  |  直到 15 年前
        1
  •  5
  •   Quartermeister    15 年前

    可以使用 MultiBinding 尽管您将需要使用转换器实现 IMultiValueConverter 为了使用它们。在这种情况下,您可能希望绑定到高度而不是实际高度,以便在执行布局后获得值。

    您可以这样定义转换器:

    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>