Facendo una raccolta di WPF espansori 'ampliare' esclusivamente, cioè un solo espansa alla volta

StackOverflow https://stackoverflow.com/questions/897146

Domanda

Ho un ListBox che contiene un gruppo di elementi 'Expander', e quello che mi piacerebbe fare è rendere la proprietà IsExpanded per ciascuno di essi esclusivi. Per esempio, se ho 10 espansori del ListBox, mi piacerebbe unico ad essere aperto alla volta.

Ecco quello che ho finora:

<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>

Esiste un modo per fare questo? Io non sono legato ad un ListBox o anzi espansori, diamine -. Non sono legato ad alcuna di esso, se ha bisogno di cambiare

È stato utile?

Soluzione

Che cosa determina se un Expander è espanso? Se si tratta di selezione, è possibile associare la proprietà IsExpanded alla proprietà IsSelected del ListBoxItem:

<Expander IsExpanded="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" ...>

Altri suggerimenti

fisarmonica Contro l forse quello che stai cercando per

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top