Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El control TreeView proporciona una manera de mostrar información en una estructura jerárquica con nodos contraíbles. En este tema se presentan los controles TreeView y TreeViewItem y se proporcionan ejemplos sencillos de su uso.
Este tema contiene las secciones siguientes.
- ¿Qué es un control TreeView?
- Crear un control TreeView
- Expandir y contraer un elemento TreeViewItem
- Selección de TreeViewItem
- Estilo de TreeView
- Agregar imágenes y otro contenido a los elementos de TreeView
- Temas relacionados
¿Qué es un control TreeView?
TreeView es un control ItemsControl que anida los elementos mediante controles TreeViewItem. En el ejemplo siguiente se crea un control 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>
Crear un control TreeView
El control TreeView contiene una jerarquía de controles TreeViewItem. Un control TreeViewItem es un control HeaderedItemsControl que tiene una colección de propiedades Header e Items.
Si va a definir TreeView mediante Extensible Application Markup Language (XAML), puede definir explícitamente el contenido de Header de un control TreeViewItem y los elementos que forman su colección. En la ilustración anterior se muestra este método.
También puede especificar ItemsSource como origen de datos y, a continuación, especificar HeaderTemplate e ItemTemplate para definir el contenido de TreeViewItem.
Para definir el diseño de un control TreeViewItem, puede utilizar también objetos HierarchicalDataTemplate. Para obtener más información y un ejemplo, vea Cómo: Usar SelectedValue, SelectedValuePath y SelectedItem.
Si un elemento no es un control TreeViewItem, se incluye automáticamente en un control TreeViewItem cuando se muestra el control TreeView.
Expandir y contraer un elemento TreeViewItem
Si el usuario expande TreeViewItem, la propiedad IsExpanded se establece en true. También se puede expandir o contraer TreeViewItem sin que el usuario realice ninguna acción directa; para ello, establezca la propiedad IsExpanded en true (para expandir) o en false (para contraer). Cuando esta propiedad cambia, se produce un evento Expanded o Collapsed.
Cuando se llama al método BringIntoView en un control TreeViewItem, éste y sus controles TreeViewItem primarios se expanden. Si TreeViewItem no está total o parcialmente visible, TreeView se desplaza para hacerlo visible.
Selección de TreeViewItem
Cuando un usuario hace clic en un control TreeViewItem para seleccionarlo, se produce el evento Selected y se establece su propiedad IsSelected en true. Además, TreeViewItem se convierte en el elemento seleccionado (SelectedItem) del control TreeView. A la inversa, cuando cambia la selección de un control TreeViewItem, se produce su evento Unselected y su propiedad IsSelected se establece en false.
La propiedad SelectedItem del control TreeView es de sólo lectura; por lo tanto, no puede establecerse explícitamente. La propiedad SelectedItem se establece si el usuario hace clic en un control TreeViewItem o cuando la propiedad IsSelected se establece en true en el control TreeViewItem.
Utilice la propiedad SelectedValuePath para especificar la propiedad SelectedValue de un control SelectedItem. Para obtener más información, vea Cómo: Usar SelectedValue, SelectedValuePath y SelectedItem.
Puede registrar un controlador de eventos en el evento SelectedItemChanged para determinar cuándo cambia un elemento TreeViewItem seleccionado. La clase RoutedPropertyChangedEventArgs<T> que se proporciona al controlador de eventos especifica la propiedad OldValue, que es la selección anterior, y la propiedad NewValue, que es la selección actual. Cualquiera de estos valores puede ser null si la aplicación o el usuario no han realizado una selección anterior o actual.
Estilo de TreeView
El estilo predeterminado de un control TreeView lo coloca dentro de un objeto StackPanel que contiene un control ScrollViewer. Cuando se establecen las propiedades Width y Height para TreeView, estos valores se utilizan para cambiar el tamaño del objeto StackPanel que muestra el control TreeView. Si el contenido que se desea mostrar es mayor que el área de presentación, se muestra automáticamente un control ScrollViewer, para que el usuario pueda desplazarse por el contenido de TreeView.
Para personalizar la apariencia de un control TreeViewItem, establezca la propiedad Style en un estilo Style personalizado.
En el ejemplo siguiente se muestra cómo establecer los valores de las propiedades Foreground y FontSize para un control TreeViewItem mediante Style.
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Foreground" Value="Blue"/>
<Setter Property="FontSize" Value="12"/>
</Style>
Agregar imágenes y otro contenido a los elementos de TreeView
Puede incluir más de un objeto en el contenido de Header de un elemento TreeViewItem. Para incluir varios objetos en el contenido de Header, encierre los objetos en un control de diseño, como Panel o StackPanel.
En el ejemplo siguiente se muestra cómo definir la propiedad Header de TreeViewItem como una clase CheckBox y una clase TextBlock incluidas en un control DockPanel.
<TreeViewItem>
<TreeViewItem.Header>
<DockPanel>
<CheckBox/>
<TextBlock>
TreeViewItem Text
</TextBlock>
</DockPanel>
</TreeViewItem.Header>
</TreeViewItem>
En el ejemplo siguiente se muestra cómo definir una clase DataTemplate que contiene un control Image y un control TextBlock incluidos en un control DockPanel. Puede utilizar DataTemplate para establecer HeaderTemplate o ItemTemplate para un elemento TreeViewItem.
<DataTemplate x:Key="NewspaperTVItem">
<DockPanel>
<Image Source="images\icon.jpg"/>
<TextBlock VerticalAlignment="center" Text ="{Binding Path=Name}"/>
</DockPanel>
</DataTemplate>