WPF- Esiste un modo per fermare TreeViewItems da diventare selezionato e attivato quando è selezionato il genitore TreeViewItem?

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

Domanda

Ho un modello di controllo per TreeViewItems e invece di mostrare il FocusVisualStyle normale che ho un MultiTrigger impostato in questo modo:

<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsSelected" Value="true"/>
        <Condition Property="IsSelectionActive" Value="true"/>
    </MultiTrigger.Conditions>
    <Setter Property="FontWeight" Value="Bold"/>
</MultiTrigger>

Tuttavia, questo fa sì che anche la FontWeight di cambiare per grassetto quando viene selezionata una voce TreeViewItem's genitore. C'è un modo per impedire che accada?

È stato utile?

Soluzione

Grande questione. Ha a che fare con la dipendenza valore della proprietà di precedenza .

Questo accade perché le voci vista albero bambino non sostituiscono la proprietà FontWeight in alcun modo in modo che siano ereditando dal loro padre visuale. Che cosa si potrebbe fare è aggiungere un altro normale trigger per quando IsSelected è falso.

<Trigger Property="IsSelected" Value="false">
    <Setter Property="FontWeight" Value="Normal" />
</Trigger>
<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsSelected" Value="true"/>
        <Condition Property="IsSelectionActive" Value="true"/>
    </MultiTrigger.Conditions>
    <Setter Property="FontWeight" Value="Bold"/>
</MultiTrigger>

Ora il bambino TreeViewItem avrà il suo insieme di proprietà FontWeight da un trigger che sostituirà la proprietà ereditata dal suo genitore selezionato.

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