2016-06-30 10 views
0

eine List-Box mit einem WrapPanel Satz als Itemspanel benutzen, ich versuche zu erreichen, was in diesem Bild dargestellt ist:Gruppenpositionen in WPF WrapPanel

enter image description here

jedoch derzeit der WrapPanel wie diese wickelt: enter image description here

Das zugrunde liegende Modell sieht wie folgt aus:

public class ViewModel 
{ 
    public ObservableCollection<IRectangle> Rectangles { get; set; }; 
} 

public class GreenRectangle : IRectangle 
{ 

} 

public class BlueRectangle : IRectangle 
{ 

} 

public interface IRectangle 
{ 

} 

XAML-Look s wie folgt aus:

<ListBox ItemsSource="{Binding Rectangles}"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.Resources> 
     <DataTemplate DataType="{x:Type GreenRectangle}"> 
      <Border Background="Green" Height="100px" Width="100px" /> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type BlueRectangle}"> 
      <Border Background="Green" Height="100px" Width="20px" /> 
     </DataTemplate> 
    </ListBox.Resources> 
</ListBox> 

Die Anwendung auf gebaut ist: WPF, PRISM, C# 6.0, .NET 4.0 und das MVVM-Muster.

Hier sind einige zusätzliche Anforderungen/Informationen:

  • Die Breite und Höhe des WrapPanel zur Laufzeit ändern können.
  • Die Breite und Höhe der Rechtecke sind festgelegt.
  • Das zugrundeliegende Modell garantiert, dass die Elemente der Rectangles-Sammlung immer alternieren, dass die Sammlung immer mit einem GreenRectangle beginnt und dass jedem GreenRectangle immer genau ein BlueRectangle folgt.
  • Der GreenRectangle und der BlueRectangle müssen separat ausgewählt werden.

Kann ich irgendwie erreichen, was auf dem ersten Bild dargestellt ist? Kann ich dem WrapPanel irgendwie sagen, dass es immer nach einem BlueRectangle oder nach einem geraden Item-Index umbrochen werden soll? Oder irgendwie "gruppieren" oder ein GreenRectangle mit einem BlueRectangle paaren? Ich habe versucht, eine CollectionView zu verwenden, aber sie scheint nicht zu lösen, was ich erreichen möchte.

Alle Ideen und Vorschläge sind willkommen.

+2

Die grün + blau sollte ein einzelnes Element dafür sein, ansonsten, gut, können Sie [eigenes Panel] (http://www.wpftutorial.net/CustomLayoutPanel.html), um Layout für ein Paar von Elementen zu arrangieren oder zu implementieren ähnlich wie winforms ['FlowLayoutPanel' break] (http://stackoverflow.com/q/5054622/1997232). – Sinatr

+0

Nun, wenn Sie eine wirklich günstige Lösung suchen, sagen Sie dem WrapPanel, dass seine MaxWidth die Breite von 2 blauen und grünen Rechtecken ist. Dann muss es sich wie gewünscht umwickeln. – Logan

+0

Wenn Sie der Meinung sind, dass eine Antwort Ihnen geholfen hat, können Sie [diese Antwort akzeptieren] (http://meta.stackexchange.com/a/5235). – lokusking

Antwort

2

Um konsequent den Effekt zu erreichen, den Sie suchen, wechseln Sie zu einem UniformGrid anstelle eines WrapPanel.

Dort können Sie die Menge der Zeilen gesetzt und Columns

Verwandte Themen