我有一个comboBox,我想动态绑定MaxDropDownHeight属性到第二行高度。
这里是xaml:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="6*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ComboBox MaxDropDownHeight="">
</ComboBox>
</Grid>
我该怎么做?
答案 0 :(得分:1)
绑定到Grid
的第二行,您可以通过两种方式实现:
首先:RelativeSource
bining:
<ComboBox DropDownOpened="ComboBox_DropDownOpened"
MaxDropDownHeight="{Binding Path=RowDefinitions[1].ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}, UpdateSourceTrigger=PropertyChanged}">
</ComboBox>
第二:通过ElementName
绑定(在这种情况下,您必须在网格Name="RootLayout"
中设置):
<ComboBox DropDownOpened="ComboBox_DropDownOpened"
MaxDropDownHeight="{Binding ElementName=RootLayout, Path=RowDefinitions[1].ActualHeight, UpdateSourceTrigger=PropertyChanged}">
</ComboBox>
在DropDownOpened
事件处理程序中,您应该使用MaxDropDownHeight
类更新BindingExpression
的值。
private void ComboBox_DropDownOpened(object sender, EventArgs e)
{
ComboBox cb = sender as ComboBox;
BindingExpression be = cb.GetBindingExpression(ComboBox.MaxDropDownHeightProperty);
be.UpdateTarget();
}