Avete qualcosa di simile a una proprietà booleana nell'origine chiamato HasDetails
o qualcosa del genere? In tal caso puoi usare qualcosa di simile. Crea un MultiDataTrigger nel ItemContainerStyle che si collega a DataContext e IsSelected
per il TreeViewItem
e se entrambi sono True (beh, Vero che HasDetails è Falso :-), si avvia uno Storyboard che "deseleziona" il nuovo selezionato TreeViewItem
.
Disabilita la selezione per tutti gli TreeViewItem
che non dispongono di dettagli ma saranno comunque espandibili. Speriamo che questo era quello che stavi cercando
<TreeView ...>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding HasDetails}" Value="False"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetProperty="(TreeViewItem.IsSelected)">
<DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Aggiornamento
Per disabilitare i TreeViewItem
's dove HasDetails è falso è possibile utilizzare questo
<TreeView ...>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsEnabled" Value="{Binding HasDetails}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
fonte
2011-02-01 21:55:20
Perché non mostrare un messaggio come "Nessun dettaglio disponibile" quando si selezionano questi nodi? Rendendoli non selezionabili non è molto coerente con la funzionalità di un TreeView. Se un utente fa clic su un nodo e quel nodo non viene selezionato, la sua prima idea sarà che il clic è stato perso (nessun riscontro visivo della sua azione). Per non parlare è molto più facile da implementare. –