0

comboBoxがあり、MaxDropDownHeightプロパティを2番目の行の高さに動的にバインドしたいと思います。

ここで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

2行目にバインドするには、次のGrid2つの方法があります。

最初に:RelativeSourceビニングによって:

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

2番目:ElementNameバインディングによる(この場合、グリッドで設定する必要があります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 に答える