我有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 >
Run Code Online (Sandbox Code Playgroud)
怎么做?
有可能不使用转换器吗?
否则可能创建SumBinding类似的类?
您可以使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在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>
Run Code Online (Sandbox Code Playgroud)
如果您只是想让控件的高度彼此固定,则可能需要使用具有星形大小的网格或具有共享大小组的多个网格.像这样的东西可能会起作用:
<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>
Run Code Online (Sandbox Code Playgroud)