2011-01-05 12 views
8

I pensa che in questo caso una foto vale più di mille parole:Come allineare le Griglie separate create tramite modelli lungo le loro colonne/righe?

alt text

XAML:

<Grid> 
    <ItemsControl ItemsSource="{Binding Persons}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <TextBlock Text="{Binding Name}" Background="LightBlue"/> 
        <TextBlock Text="{Binding Age}" Background="LightPink" Grid.Column="1"/> 
       </Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 

ps - non voglio impostare una specifica con la prima colonna , ma per dargli il massimo di ciò di cui ha bisogno.

Aggiornamento: Ho provato il legame di Coline e fatto questo:

<Grid.ColumnDefinitions> 
         <ColumnDefinition SharedSizeGroup="A" Width="Auto"/> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 

ma non ha funzionato per me.

risposta

11

È necessario utilizzare uno SharedSizeGroup per ogni colonna.

Dai un'occhiata a questo tutorial ...

http://blogs.interknowlogy.com/johnbowen/archive/2007/08/27/21132.aspx

Inoltre, assicurarsi che la proprietà ambito dimensione condivisa è vero per la griglia:

<Grid Grid.IsSharedSizeScope="True"> 
    <ItemsControl ItemsSource="{Binding Persons}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto" SharedSizeGroup="A"/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <TextBlock Text="{Binding Name}" Background="LightBlue"/> 
        <TextBlock Text="{Binding Age}" Background="LightPink" Grid.Column="1"/> 
       </Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 
+0

Grazie, ho provato in qualche modo a utilizzare SharedSizeGroup e ancora non sono riuscito a risolvere il problema. Uno di questi è quello che stai nell'area aggiornata. – Erez

+0

cambiare anche la prima istanza della griglia contenitore per avere la attributo. Poi funziona bene :) – Tom

+0

Grazie Tom ... IsSharedSizeScope è indicato in tale tutorial, ma non mostrato negli esempi. Ho aggiornato lui risponde – ColinE

1

Invece di usare griglia come sull'utilizzo di DataGrid ?

<Grid> 

    <DataGrid ItemsSource="{Binding}" 
      AutoGenerateColumns="False" 
      IsReadOnly="True" 
      CanUserAddRows="False" 
      ColumnHeaderHeight="0" 
      GridLinesVisibility="None"> 

     <DataGrid.Resources> 

      <Style TargetType="DataGridCell" x:Key="NameStyle"> 
       <Setter Property="Background" Value="LightBlue"/> 
       <Setter Property="BorderBrush" Value="LightBlue"/> 
      </Style> 

      <Style TargetType="DataGridCell" x:Key="AgeStyle"> 
       <Setter Property="Background" Value="LightPink"/> 
       <Setter Property="BorderBrush" Value="LightPink"/> 
      </Style> 

     </DataGrid.Resources> 

     <DataGrid.Columns> 

      <DataGridTextColumn Binding="{Binding Name}" 
           CellStyle="{StaticResource ResourceKey=NameStyle}"/> 

      <DataGridTextColumn Binding="{Binding Age}" 
           CellStyle="{StaticResource ResourceKey=AgeStyle}"/> 

     </DataGrid.Columns> 

    </DataGrid> 

</Grid> 
+0

Grazie Tim, Dato che i miei dati sono solo di lettura, mi sembra ingiustificato utilizzare DataGrid – Erez

Problemi correlati