Applica lo stile al primo bambino?

C’è un modo per applicare gli stili al primo (o ultimo o ennesimo) figlio di un contenitore (qualsiasi cosa contenga figli)? Sto cercando di personalizzare l’aspetto degli elementi della scheda in modo che il primo abbia un raggio di confine diverso dagli altri.

Questo è quello che ho adesso:

         

Per le classi derivate ItemsControl (come TabControl), è ansible utilizzare la proprietà di dipendenza ItemContainerStyleSelector. Quando viene impostata questa proprietà di dipendenza, ItemsControl chiamerà StyleSelector.SelectStyle () per ciascun elemento nel controllo. Questo ti permetterà di usare stili diversi per oggetti diversi.

L’esempio seguente modifica l’ultimo elemento della scheda in un object TabControl in modo che il suo testo sia in grassetto e leggermente più grande rispetto alle altre tabs.

Innanzitutto, la nuova class StyleSelector:

 class LastItemStyleSelector : StyleSelector { public override Style SelectStyle(object item, DependencyObject container) { var itemsControl = ItemsControl.ItemsControlFromItemContainer(container); var index = itemsControl.ItemContainerGenerator.IndexFromContainer(container); if (index == itemsControl.Items.Count - 1) { return (Style)itemsControl.FindResource("LastItemStyle"); } return base.SelectStyle(item, container); } } 

Questo selettore di stile restituirà lo stile con il tasto “LastItemStyle” ma solo per l’ultimo elemento nel controllo. Gli altri elementi useranno lo stile predefinito. (Si noti che questa funzione utilizza solo membri di ItemsControl e potrebbe essere utilizzata anche per altre classi derivate da ItemsControl.) Successivamente, nel proprio XAML, è necessario prima creare due risorse. La prima risorsa sarà per questo LastItemStyleSelector e la seconda risorsa per lo stile.

     

Quindi finalmente il tuo TabControl:

       

Per ulteriori informazioni consultare la documentazione MSDN:

  • Proprietà ItemsControl.ItemContainerStyleSelector
  • StyleSelector Class

A differenza di HTML e CSS, non esiste un modo semplice per determinare e triggersre quel tipo di modifica.

Potresti potenzialmente scrivere un trigger e usare un convertitore di valori per fare qualcosa del genere usando questo post sul forum come ispirazione potenzialmente.

Molto più semplice sarebbe applicare uno stile personalizzato al tabitem che si desidera apparire diverso. Hai provato?