【问题标题】:WPF binding the height of a Element to the sum of 3 Element heightsWPF将元素的高度绑定到3个元素高度的总和
【发布时间】:2023-03-24 15:25:01
【问题描述】:

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

【问题讨论】:

  • 你有没有尝试过?
  • 如果您尝试布局元素,那么只需使用Grid,它就是专门为此设计的。
  • 如果您得到了答案,则将其标记为已接受的答案;这对其他人会有所帮助。

标签: c# wpf xaml binding height


【解决方案1】:

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

【讨论】:

  • +1 了解可用选项的完整描述。并且-1e3 给 OP,因为除了他的问题之外没有提供任何东西:没有“我尝试过的”,没有“谢谢”,什么都没有。
猜你喜欢
  • 2017-03-23
  • 1970-01-01
  • 2020-02-06
  • 2017-04-29
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多