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.
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}}}" ...>