0

我有一个组合框,我想将 MaxDropDownHeight 属性动态绑定到第二行高度。

这里的xaml:

  <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="6*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <ComboBox MaxDropDownHeight="">

    </ComboBox>
</Grid>

我怎样才能做到这一点?

4

1 回答 1

1

绑定到您的第二行Grid可以通过两种方式实现:

第一:通过RelativeSource装箱:

<ComboBox DropDownOpened="ComboBox_DropDownOpened" 
          MaxDropDownHeight="{Binding Path=RowDefinitions[1].ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}, UpdateSourceTrigger=PropertyChanged}">       
</ComboBox>

第二:通过ElementName绑定(在这种情况下,您必须在 grid 中设置Name="RootLayout"):

<ComboBox DropDownOpened="ComboBox_DropDownOpened" 
          MaxDropDownHeight="{Binding ElementName=RootLayout, Path=RowDefinitions[1].ActualHeight, UpdateSourceTrigger=PropertyChanged}">            
</ComboBox>

在事件处理程序中,您应该使用类DropDownOpened更新值 。MaxDropDownHeightBindingExpression

private void ComboBox_DropDownOpened(object sender, EventArgs e)
{
    ComboBox cb = sender as ComboBox;
    BindingExpression be = cb.GetBindingExpression(ComboBox.MaxDropDownHeightProperty);
    be.UpdateTarget();
}
于 2013-03-24T10:24:43.967 回答