Condividi tramite


Vista ad albero

Il controllo TreeView visualizza informazioni in una struttura gerarchica usando nodi compressi. Questo articolo presenta i TreeView controlli e TreeViewItem e fornisce esempi dell'uso.

La figura seguente è un esempio di controllo TreeView con controlli TreeViewItem annidati:

Screenshot di un controllo TreeView in WPF.

Che cos'è un TreeView?

TreeView è un ItemsControl che annida gli elementi utilizzando i controlli TreeViewItem. Nell'esempio seguente viene creato un oggetto TreeView.

<TreeView Name="myTreeViewEvent" >
  <TreeViewItem Header="Employee1" IsSelected="True">
    <TreeViewItem Header="Jesper Aaberg"/>
    <TreeViewItem Header="Employee Number">
      <TreeViewItem Header="12345"/>
    </TreeViewItem>
    <TreeViewItem Header="Work Days">
      <TreeViewItem Header="Monday"/>
      <TreeViewItem Header="Tuesday"/>
      <TreeViewItem Header="Thursday"/>
    </TreeViewItem>
  </TreeViewItem>
  <TreeViewItem Header="Employee2">
    <TreeViewItem Header="Dominik Paiha"/>
    <TreeViewItem Header="Employee Number">
      <TreeViewItem Header="98765"/>
    </TreeViewItem>
    <TreeViewItem Header="Work Days">
      <TreeViewItem Header="Tuesday"/>
      <TreeViewItem Header="Wednesday"/>
      <TreeViewItem Header="Friday"/>
    </TreeViewItem>
  </TreeViewItem>
</TreeView>

Creare un TreeView

Il TreeView controllo contiene una gerarchia di TreeViewItem controlli. Un TreeViewItem controllo è un HeaderedItemsControl che ha un Header e una collezione Items.

Se stai definendo un TreeView oggetto usando Extensible Application Markup Language (XAML), puoi definire in modo esplicito il Header contenuto di un TreeViewItem controllo e gli elementi che costituiscono la raccolta. La figura precedente illustra questo metodo.

È anche possibile specificare un oggetto ItemsSource come origine dati e quindi specificare un HeaderTemplate oggetto e ItemTemplate per definire il TreeViewItem contenuto.

Per definire il layout di un TreeViewItem controllo, è anche possibile utilizzare HierarchicalDataTemplate oggetti . Per altre informazioni e un esempio, vedere Usare SelectedValue, SelectedValuePath e SelectedItem.

Se un elemento non è un TreeViewItem controllo, viene automaticamente racchiuso da un TreeViewItem controllo quando il TreeView controllo viene visualizzato.

Espandere e comprimere un oggetto TreeViewItem

Se l'utente espande un TreeViewItemoggetto , la IsExpanded proprietà viene impostata su true. È anche possibile espandere o comprimere un oggetto TreeViewItem senza alcuna azione diretta dell'utente impostando la IsExpanded proprietà su true (espandere) o false (comprimere). Quando questa proprietà viene modificata, si verifica un evento Expanded o Collapsed.

Quando il metodo BringIntoView viene chiamato su un controllo TreeViewItem, i controlli TreeViewItem e i loro controlli padre TreeViewItem si espandono. Se un TreeViewItem oggetto non è visibile o parzialmente visibile, TreeView scorre per renderlo visibile.

Selezionare un TreeViewItem

Quando un utente fa clic su un TreeViewItem controllo per selezionarlo, l'evento Selected si verifica e la relativa IsSelected proprietà viene impostata su true. Diventa anche TreeViewItem l'oggetto SelectedItem del controllo TreeView. Al contrario, quando la selezione cambia da un TreeViewItem controllo, l'evento Unselected si verifica e la relativa proprietà IsSelected viene impostata su false.

La SelectedItem proprietà nel TreeView controllo è una proprietà di sola lettura, pertanto non è possibile impostarla in modo esplicito. La SelectedItem proprietà viene impostata se l'utente fa clic su un TreeViewItem controllo o quando la IsSelected proprietà è impostata su true sul TreeViewItem controllo .

Utilizzare la SelectedValuePath proprietà per specificare una SelectedValue di un SelectedItem. Per altre informazioni, vedere Usare SelectedValue, SelectedValuePath e SelectedItem.

È possibile registrare un gestore eventi nell'evento SelectedItemChanged per determinare quando un oggetto selezionato TreeViewItem cambia. L'oggetto RoutedPropertyChangedEventArgs<T> fornito al gestore eventi specifica , OldValueche è la selezione precedente e , NewValueche è la selezione corrente. Entrambi i valori possono essere null se l'applicazione o l'utente non ha eseguito una selezione precedente o corrente.

Stilizzare un TreeView

Lo stile predefinito per un TreeView controllo lo inserisce all'interno di un StackPanel oggetto che contiene un ScrollViewer controllo . Quando si impostano le Width proprietà e Height per un oggetto TreeView, questi valori vengono usati per ridimensionare l'oggetto StackPanel che visualizza .TreeView Se il contenuto da visualizzare è più grande dell'area di visualizzazione, un ScrollViewer viene visualizzato automaticamente affinché l'utente possa scorrere il contenuto TreeView.

Per personalizzare l'aspetto di un controllo TreeViewItem, impostare la proprietà Style su un Style personalizzato.

Nell'esempio seguente viene illustrato come impostare i valori delle Foreground proprietà e FontSize per un TreeViewItem controllo utilizzando un oggetto Style.

<Style TargetType="{x:Type TreeViewItem}">
  <Setter Property="Foreground" Value="Blue"/>
  <Setter Property="FontSize" Value="12"/>
</Style>

Aggiungere immagini e altro contenuto agli elementi TreeView

È possibile includere più oggetti nel Header contenuto di un oggetto TreeViewItem. Per includere più oggetti nei contenuti di Header, racchiudere gli oggetti all'interno di un controllo di layout, come un Panel o un StackPanel.

Nell'esempio seguente viene illustrato come definire l'oggetto Header di un TreeViewItem come CheckBox e TextBlock, che sono entrambi racchiusi in un controllo DockPanel.

<TreeViewItem>
  <TreeViewItem.Header>
    <DockPanel>
      <CheckBox/>
      <TextBlock>
        TreeViewItem Text
      </TextBlock>
    </DockPanel>
  </TreeViewItem.Header>
</TreeViewItem>

Nell'esempio seguente viene illustrato come definire un DataTemplate che contiene un Image e un TextBlock racchiuso in un controllo DockPanel. È possibile usare un DataTemplate per impostare il HeaderTemplate o il ItemTemplate per un TreeViewItem.

<DataTemplate x:Key="NewspaperTVItem">
  <DockPanel>
    <Image Source="images\icon.jpg"/>
    <TextBlock VerticalAlignment="center" Text ="{Binding Path=Name}"/>
  </DockPanel>
</DataTemplate>

Attività comuni

La tabella seguente elenca le attività comuni per l'uso del controllo TreeView:

Titolo Description
Creare oggetti TreeView semplici o complessi Informazioni su come creare controlli TreeView con strutture diverse.
Usare SelectedValue, SelectedValuePath e SelectedItem Scopri come lavorare con le proprietà di selezione in un controllo TreeView.
Associare un controllo TreeView ai dati con una profondità indeterminabile Scopri come associare un controllo TreeView a dati gerarchici con profondità sconosciuta.
Migliorare le prestazioni del controllo TreeView Informazioni su come ottimizzare le prestazioni di TreeView.
Trovare un oggetto TreeViewItem in un controllo TreeView Scopri come individuare un oggetto TreeViewItem specifico all'interno di un controllo TreeView.

Panoramica sul data binding

Panoramica della creazione di modelli di dati

Riferimenti

TreeView TreeViewItem

Stili e modelli

È possibile modificare l'impostazione predefinita ControlTemplate per assegnare al TreeView controllo un aspetto univoco. Per altre informazioni, vedere Che cosa sono gli stili e i modelli? e Come creare un modello per un controllo.

Parti

Il TreeView controllo non possiede parti denominate.

Quando si crea un ControlTemplate per un TreeView, il modello potrebbe contenere un ItemsPresenter all'interno di un ScrollViewer. L'oggetto ItemsPresenter visualizza ogni elemento dell'oggetto TreeView. ScrollViewer abilita lo scorrimento all'interno del controllo . Se il ItemsPresenter non è l'elemento figlio diretto di ScrollViewer, è necessario dare al ItemsPresenter il nome ItemsPresenter.

Stati di visualizzazione

Nella tabella seguente sono elencati gli stati di visualizzazione per il TreeView controllo .

Nome VisualState Nome VisualStateGroup Description
Valido StatiDiValidazione Il controllo usa la Validation classe e la Validation.HasError proprietà associata è false.
FuocoNonValido StatiDiValidazione La Validation.HasError proprietà associata è true e il controllo ha lo stato attivo.
Non valido se non focalizzato StatiDiValidazione La Validation.HasError proprietà associata è true e il controllo non ha il focus.

Parti di TreeViewItem

Nella tabella seguente sono elencate le parti denominate del controllo TreeViewItem.

Parte TIPO Description
PART_Header FrameworkElement Elemento visivo che contiene il contenuto dell'intestazione del controllo TreeView.

Stati di TreeViewItem

Nella tabella seguente sono elencati gli stati di visualizzazione per TreeViewItem il controllo.

Nome VisualState Nome VisualStateGroup Description
Normal CommonStates Stato predefinito.
Mouseover CommonStates Il puntatore del mouse è posizionato su TreeViewItem.
Disabled CommonStates L'TreeViewItem è disabilitato.
Focused FocusStates È focalizzato su TreeViewItem.
Non focalizzato FocusStates l'oggetto TreeViewItem non ha il focus.
Expanded ExpansionStates Il TreeViewItem controllo viene espanso.
Crollato ExpansionStates Il TreeViewItem controllo è compresso.
HasItems StatiDegliElementi Contiene TreeViewItem elementi.
Nessun elemento StatiDegliElementi l'oggetto TreeViewItem non dispone di elementi.
Selezionato SelectionStates L'oggetto TreeViewItem è selezionato.
SelezionatoInattivo SelectionStates L'oggetto TreeViewItem è selezionato ma non attivo.
Opzione non selezionata SelectionStates L'oggetto TreeViewItem non è selezionato.
Valido StatiDiValidazione Il controllo usa la Validation classe e la Validation.HasError proprietà associata è false.
FuocoNonValido StatiDiValidazione La proprietà Validation.HasError associata è true quella che ha il controllo dello stato attivo.
Non valido se non focalizzato StatiDiValidazione La Validation.HasError proprietà associata indica true quando il controllo non ha lo stato attivo.

Panoramica del data binding -Panoramica dei modelli di dati