Hallo,
ich bin gerade bei einem technischen Problem und bräuchte kurz eure Hilfe:
In meiner Anwendung ist eine Listbox mit einem Wrappanel als ItemsPanel. Dieses Wrappanel hat ein DataTemplate, um die einzelnen Items grafisch darstellen zu können. Via einem Slider und einer ViewBox ist zusätzlich ein Zoom implementiert.
<ListBox x:Name="listbox2" SelectionMode="Extended"
ItemsSource="{Binding Converter={StaticResource GroupingItemsControlConverter},
ConverterParameter={StaticResource SimpleGroupingItemsControlConverterParameter}}"
SelectionChanged="ListBox_SelectionChanged"
Height="280" Width="570"
HorizontalAlignment="Left" VerticalAlignment="Top">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" Width="540" Loaded="WrapPanel_Loaded" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
...
<DataTemplate>
<Viewbox Stretch="UniformToFill">
<Border BorderBrush="DarkGray" BorderThickness="1" Margin="5,5,5,5">
<StackPanel Orientation="Vertical" Width="100" Height="50">
...
</StackPanel>
</Border>
</Viewbox>
</DataTemplate>
...
Meine Ziel ist es jetzt, zusätzlich zu diesen Funktionalitäten eine Gruppierung einzubauen. Wenn ich darin z.B. 15 Tiere habe, haben diese jeweils eine bestimmte Spezies (Fisch, Katze, Hund). Die Items sollen bei aktivieren der Gruppierung mit einem Expander angezeigt werden.
Die gängigen Lösungen im Internet für Gruppierungen funktionieren leider nicht. Sobald ich den Wert ItemWidth oder ItemHeight des Wrappanels setze, wird auch das Item für die Gruppierung auf die Breite gesetzt. Das darf aber nicht sein, da die Gruppe die ganze Zeile ausfüllen muss.
Wie kann ich innerhalb eines Wrappanels in einer Listbox so etwas umsetzen? Hat so etwas schon mal jemand gemacht?
Würde mich über Hilfe freuen.
mfg
Easy
Hi,
welche Breite soll nun ausschlaggebend sein? - Jene vom Wrappanel oder die welche sich durch die Reihe der Spezien ergibt?
In die Reihe selbst bekommst du deine Objekt zB durch die Verwendung eines VirtualizingStackPanel im Expander.
Viele Grüße.
Hallo,
die Breite vom Wrappanel ist die wichtige. Der Expander sollte eine komplette "Zeile" des Wrappanels ausfüllen.
Ein Expander kann die ganze Zeile eines WrapPanels ausfüllen indem du seine Breite an die des WrapPanels bindest:
Expander Width="{Binding ActualWidth, ElementName=wrapPanel, Mode=OneWay}"
Um immer eine ganze Zeile von einem Objekt zu besetzen kannst du aber auch ein Stackpanel verwenden.
Viele Grüße.