2009-10-16 4 views
1

J'ai cette Xaml dans un ListBox article Modèle:Grille avec une image, textblock et rectangle, à l'intérieur d'une zone de liste ne montrant pas exactement droit

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <Grid Height="22" Width="Auto"> 
      <Image Margin="-2,0,0,0" Source="{Binding Path=ADsPath, Converter={StaticResource ImxConverter}}" HorizontalAlignment="Left" Width="22" /> 
      <TextBlock Margin="20,3,0,0" Text="{Binding Path=DisplayValue}" Width="Auto" /> 
      <Rectangle Fill="White" Stroke="White" Margin="-2,0,-2,0.5" VerticalAlignment="Bottom" Height="1" Width="Auto" /> 
     </Grid> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

L'idée est que le rectangle, fournit un mince blanc ligne à travers le bas de l'ensemble de l'élément ListBox; Cependant, avec le Xaml ci-dessus, il ne s'étend que sur le texte, pas sur toute la largeur de la ListBox.

Répondre

1

Si vous définissez votre largeur sur Auto, cela signifie simplement qu'elle est suffisamment grande pour tout contenir à l'intérieur. Je pense que vous devez définir l'alignement horizontal de votre grille pour l'étirer pour qu'il fonctionne correctement.

Edit:

je l'ai fait une application petit échantillon. Voici comment je ferais ce que vous essayez de faire:

Sur votre listbox réelle, j'aurais la propriété HorizontalContentAlignment mis à Étirez

et

je changerais votre grille à un DockPanel:

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <DockPanel Height="22" HorizontalAlignment="Stretch"> 
      <Rectangle Fill="White" Stroke="White" Margin="-2,0,-2,0.5" DockPanel.Dock="Bottom" Height="1"/> 
      <Image Margin="-2,0,0,0" Height="20" DockPanel.Dock="Left" Width="22" /> 
      <TextBlock Margin="20,3,0,0" Text="Daniel Manning" DockPanel.Dock="Left"/> 
     </DockPanel> 
    </DataTemplate> 
</ListBox.ItemTemplate> 
+0

Dois-je supprimer la largeur = "Auto" de tous les éléments enfants ou seulement la grille? – Nate

+1

Je ne pense pas que vous aurez besoin de, je pense que la Largeur de votre TextBlock est Auto par défaut (pas sûr), vous voudrez peut-être le retirer de votre rectangle, et changer HorizontalAlignment du rectangle pour étirer si. – Scott

+1

Voir Modifier: La seule raison pour laquelle je suggère un DockPanel par rapport à la grille est qu'une grille est beaucoup plus chère, et un panneau de quai semble beaucoup plus efficace pour ce que vous essayez d'accomplir. – Scott

1

Avez-vous essayé d'enlever Width = "Auto"? Auto dit "ne fais que me rendre aussi grand que j'ai besoin d'être" ce qui, dans votre cas, est déterminé par la longueur du texte. La valeur par défaut est "Stretch" qui signifie "hey container, faites-moi une faveur et faites moi aussi large que vous êtes".

Questions connexes