2013-03-24 2 views
0

У меня есть comboBox, и я хочу динамически связывать свойство MaxDropDownHeight со второй высотой строки.WPF привязка свойство MaxDropDownHeight к высоте строки сетки

Здесь XAML:

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

    <ComboBox MaxDropDownHeight=""> 

    </ComboBox> 
</Grid> 

Как я могу это сделать?

ответ

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(); 
}