2017-08-22 5 views
0

Ich habe eine variable Anzahl von Elementen, die vom Ansichtsmodell gebunden sind und horizontal angezeigt werden müssen. Jedes Element wird durch einen Text dargestellt, diese Texte variieren in der Länge. Wenn ich eine Listenansicht mit einem StackPanel mit horizontaler Ausrichtung als ItemTemplate verwende, sind die Elemente nur so breit wie der darin enthaltene Text. Gibt es eine Möglichkeit, sie alle gleich groß zu machen, also die Größe der breitesten? Idealerweise ohne einen komplexen Codebehind, mit Item Templates und so? Hinweis: Ich kann nicht etwas willkürlich minimale Breite eingestellt, weil ich nicht weiß, welche Länge der Texte schließlich (verschiedene Sprachen, etc.) habenWPF: Horizontal ausgerichtete Sammlung mit Elementen mit einheitlicher Breite

+0

Können Sie so etwas wie 'Width = "1 *"' tun für jedes Element? –

+0

Nicht sicher, was Sie damit meinen. Breite auf einem TexBlock unterstützt keine Dinge wie "1 *". Wenn Sie ein Raster mit einer Spaltendefinition haben wollten, habe ich das einfach versucht. Tut nichts. Aber selbst wenn ich das irgendwie zur Arbeit bringen würde, denke ich das würde meine Artikel auf die maximale Breite strecken, was nicht das ist, was ich will. " – Shaggydog

Antwort

1

Sie können ListBox verwenden, die mit UniformGrid als Itemspanel Auswahl Unterstützung. Uniform wird für jedes Element gleich Speicherplatz zuteilen

<ListBox> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Rows="1"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 

    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Label Content="{Binding}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Beispiel

uniform

+0

Während das funktioniert, habe ich Probleme, einen Rahmen zwischen den Elementen hinzuzufügen und die Standardhintergrundfarbe eines ausgewählten Elements zu ändern. Kannst du mir helfen? ? – Shaggydog

+0

@Shaggydog, überprüfe [diese F + A] (https://stackoverflow.com/questions/7059526/set-background-color-for-selected-items-in-a-listbox) für die Farbeinstellung Beispiel. Ich würde anfangen, indem ich den Seitenrand zu Label ('Label BorderThickness =" 1,0 "BorderBrush =" Red "') oder Border Element um Label hinzufüge. Wenn das nicht gut aussieht, würde ich es mit einem benutzerdefinierten ListBoxItem Template versuchen ohne IDE im Moment, wenn Sie weitere Hilfe zu Ihrem Problem benötigen, schlage ich vor, eine neue Frage zu stellen. – ASh

Verwandte Themen