【发布时间】:2023-03-24 15:25:01
【问题描述】:
有没有办法在 1 个元素高度上绑定 3 个元素的高度?
【问题讨论】:
-
你有没有尝试过?
-
如果您尝试布局元素,那么只需使用
Grid,它就是专门为此设计的。 -
如果您得到了答案,则将其标记为已接受的答案;这对其他人会有所帮助。
标签: c# wpf xaml binding height
有没有办法在 1 个元素高度上绑定 3 个元素的高度?
【问题讨论】:
Grid,它就是专门为此设计的。
标签: c# wpf xaml binding height
您可以使用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>
【讨论】: