2010-12-07 21 views
3

I ont un modèle de formatage de données articles dans une zone de listeWPF, modèle de données largeur

<DataTemplate x:Key="ChildViewModelTemplate"> 
    <Border BorderBrush="#FFDC1C1C" BorderThickness="1" > 
     <Grid> 
      <TextBlock Text="{Binding Path=DisplayName}"></TextBlock> 
      <Image Height="Auto" Margin="0,0,2,0" VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="31" Source="pack://siteoforigin:,,,/rocket.ico"/> 
     </Grid> 
    </Border>     
</DataTemplate> 

Cela met une bordure autour de chaque élément étendant à la longueur de la chaîne de texte lié à la liaison TextBlock.

Existe-t-il un moyen simple d'avoir tous les éléments de la même largeur, où la largeur est égale à l'élément le plus long? Pour les points bonus, je me demande s'il existe un moyen de le faire pour l'élément visible le plus long et/ou l'élément le plus long, même s'il est visible.

Merci

Répondre

3

Faisant suite à la réponse de Botz3000. SharedSizeGroup est la manière d'aller ici. Cela le fera

<ListBox ... 
     Grid.IsSharedSizeScope="True"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" SharedSizeGroup="Col1"/> 
       </Grid.ColumnDefinitions> 
       <Border BorderBrush="#FFDC1C1C" BorderThickness="1" > 
        <Grid> 
         <TextBlock Text="{Binding Path=DisplayName}"></TextBlock> 
         <Image Height="Auto" Margin="0,0,2,0" VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="31" Source="C:\C1.png"/> 
        </Grid> 
       </Border> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+2

Brilliant! C'est ce que j'aime à propos de WPF jusqu'à maintenant, je ne pense pas qu'il y ait quelque chose que je puisse imaginer que les concepteurs n'aient pas déjà pensé et qui a fourni une solution. Le tutoriel est excellent et me donne aussi un aperçu de RelativeSource, que j'avais l'intention de regarder :) – Ian