2010-02-22 3 views
1

Я создал сетку супер заголовков, привязанных к datagrid. Верхние заголовки располагаются над их соответствующими столбцами данных при изменении размеров столбцов данных.Связывание столбцов верхнего заголовка с шириной столбца DataGrid в коде

Переплет XAML замечательный, и все работает нормально.

Единственная проблема, однако, в том, что мне нужно иметь возможность динамически строить это в коде C#. Пробовал ряд подходов, но я не могу получить привязку к работе.

Что такое C# эквивалент следующий XAML

Спасибо.

<Window x:Class="TESTDataColumnWidthBinding.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="419" Width="827" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"> 
<Grid x:Name="windowGrid"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="auto"/> 
     <RowDefinition Height="auto"/> 
     <RowDefinition Height="2*"/> 
    </Grid.RowDefinitions> 
     <Grid Grid.Row="0" x:Name="SuperHeaderGrid"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="{Binding ElementName=DetailDataGrid, Path=RowHeaderWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column0, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column1, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column2, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column3, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column4, Path=ActualWidth}" /> 
      </Grid.ColumnDefinitions> 
      <Border Grid.Column="2" Grid.ColumnSpan="5" BorderBrush="Gray" Background="AliceBlue" HorizontalAlignment="Stretch" BorderThickness="1"> 
       <Label>Super Header 1</Label> 
      </Border> 
     </Grid> 
     <Grid Grid.Row="1" x:Name="CategoryHeaderGrid"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="{Binding ElementName=DetailDataGrid, Path=RowHeaderWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column0, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column1, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column2, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column3, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=Column4, Path=ActualWidth}" /> 
      </Grid.ColumnDefinitions> 
      <Border Grid.Column="2" Grid.ColumnSpan="2" BorderBrush="Gray" Background="Beige" HorizontalAlignment="Stretch" BorderThickness="1"> 
       <Label>Cat 1</Label> 
      </Border> 
      <Border Grid.Column="4" Grid.ColumnSpan="2" BorderBrush="Gray" Background="AntiqueWhite" HorizontalAlignment="Stretch" BorderThickness="1"> 
       <Label>Cat 2</Label> 
      </Border> 
     </Grid> 

    <my:DataGrid Grid.Column="0" Grid.ColumnSpan="15" Grid.Row="3" x:Name="DetailDataGrid" ItemsSource="{Binding Path=.}" AlternatingRowBackground="AliceBlue"> 
     <my:DataGrid.Columns> 
      <my:DataGridTextColumn x:Name="Column0" Header="ID" /> 
      <my:DataGridTextColumn x:Name="Column1" Header="Count1" /> 
      <my:DataGridTextColumn x:Name="Column2" Header="Count2" /> 
      <my:DataGridTextColumn x:Name="Column3" Header="Count3" /> 
      <my:DataGridTextColumn x:Name="Column4" Header="Count4" /> 
     </my:DataGrid.Columns> 
    </my:DataGrid> 
</Grid> 

ответ

0

должны быть эквивалентны:

Связывание cdBinding = новый Binding ("RowHeaderWidth"); cdBinding.Source = DetailDataGrid;

ColumnDefinition colDef = new ColumnDefinition(); colDef.SetBinding (ColumnDefinition.WidthProperty, cdBinding);

SuperHeaderGrid.ColumnDefinitions.Add (colDef);

И аналогично для других определений столбцов.

Смежные вопросы