Making a collection of WPF Expanders 'expand' exclusively, i.e. only one expanded at a time
-
23-08-2019 - |
Question
I have a ListBox containing a group of 'Expander' items, and what I would like to do is make the IsExpanded
property for each of them exclusive. For example, if I have 10 Expanders in the ListBox
, I'd like only one to be open at a time.
Here is what I have so far:
<Window>
<Window.Resources>
<DataTemplate x:Key="NormalTemplate">
<Expander Margin="0" IsExpanded="True" Header="{Binding Model.Name}" Background="Green">
<Grid>
<StackPanel HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Model.Description}" TextWrapping="Wrap" HorizontalAlignment="Stretch" Margin="0"/>
</StackPanel>
</Grid>
</Expander>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding Groups}"
ItemTemplate="{DynamicResource NormalTemplate}"
/>
</Grid>
</Window>
Is there any way to do this? I'm not tied to a ListBox
or indeed Expanders, heck - I'm not tied to any of it if it needs to change.
Solution
What determines whether an Expander
is expanded? If it's selection, you could bind the IsExpanded
property to the IsSelected
property of the ListBoxItem
:
<Expander IsExpanded="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" ...>
OTHER TIPS
This Accordian control maybe what you are looking for
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow