2017-01-05 2 views
0


Kann nicht eine Lösung für ein ziemlich einfaches Benutzeroberfläche Problem finden:
Ich habe ein Modell mit einer Eigenschaft Images. Die Images-Eigenschaft enthält eine Sammlung von Elementen Image.
Jetzt für - Ich habe eine ListBox und binden eine ListBoxItem Datenvorlage an Images.Image und alles gut. Aber ich habe jedes Element in einer neuen Zeile. Nicht gut.
Was ich zu erreichen gewillt ist, lässt sich als eine Listbox mit horizontaler Ausrichtung von Elementen und Limit von Elementen in einer Zeile beschreiben. Genau wie große Symbole Stil im Windows Explorer anzeigen.
Haben Sie schon einmal eine solche Lösung implementiert? Jeder Rat wird sehr geschätzt.
Vielen Dank im Voraus.Artikel Box mit Limit von Objekten in Reihe (Große Symbole Stil in Windows Explorer anzeigen)

Antwort

2

Verwenden Sie ein WrapPanel (oder eine andere geeignete Panel) als ListBox des ItemsPanel, und deaktivieren Sie das horizontale Scrollen:

<ListBox ItemsSource="{Binding Images}" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Image Source="{Binding}" Width="100" Margin="5"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
1

Sie können die ListBox ‚gesetzt s ItemPanelTemplate-WrapPanel, wie this.

0

Ich bin nicht sicher, warum es immer so ist - aber sobald ich fragte, habe ich eine alternative Lösung mit Verwendung von Listview gefunden:

  <ListView ItemsSource="{Binding Images}"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
          <Image Source="{Binding Image}" /> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
       <ListView.ItemsPanel> 
        <ItemsPanelTemplate> 
         <UniformGrid Columns="2" /> 
        </ItemsPanelTemplate> 
       </ListView.ItemsPanel> 
      </ListView> 
+0

Dies funktioniert genau das gleiche mit einer List-Box. Sie müssen das horizontale Scrollen einfach nicht deaktivieren, da Sie ein anderes Panel verwenden. – Clemens

+0

Zustimmen, aber ich postete alternative Lösung, denn, nun ja, sie passen zu einer anderen Situation. Mit Wrapper - die Elemente werden in der nächsten Zeile verschoben, abhängig davon, ob es einen Platz für den "letzten Eintrag" gibt (korrigiere mich, wenn ich falsch liege). In meiner Annäherung setze ich - wie viel Einzelteile ich in einer einzelnen Reihe sehen möchte, mit UniformGrid. –

+1

Sicher, das ist der Grund, warum Sie das ItemsPanel in einem ItemsControl festlegen können. Genau das habe ich in meiner Antwort mit "WrapPanel (oder einem anderen geeigneten Panel)" gemeint. – Clemens