2011-01-05 13 views
8

I piensa que en este caso una imagen vale más que mil palabras:¿Cómo alinear Grillas separadas creadas mediante plantillas a lo largo de sus columnas/filas?

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 - no quiero fijar un específico con la primera columna , pero para darle el máximo con lo que necesita.

Actualización: He intentado enlace de Coline y hecho esto:

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

pero no funcionó para mí.

Respuesta

11

Debe usar un SharedSizeGroup para cada columna.

Salida este tutorial ...

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

Además, asegúrese de que la propiedad compartida alcance el tamaño es cierto para la cuadrícula:

<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

Gracias, he intentado de alguna manera utilizar el SharedSizeGroup y todavía no he podido resolver el problema. Uno de ellos es lo que usas en el área actualizada. – Erez

+0

También cambie la primera instancia de su cuadrícula de contenedor para tener el atributo . Entonces funciona muy bien :) – Tom

+0

Gracias Tom ... IsSharedSizeScope se menciona en ese tutorial, pero no se muestra en los ejemplos. He actualizado él respuesta – ColinE

1

En lugar de utilizar la rejilla sobre el uso de la forma 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

Gracias Tim, como mis datos son solo de lectura, me parece injustificado el uso de DataGrid – Erez

Cuestiones relacionadas