2008-10-30 8 views

Respuesta

2

que ver lo que puede necesitar para anular el estilo de vista de árbol. Idealmente, tendrá dos tipos de elementos treeview uno para sus nodos de nivel superior (im asumiendo carpetas) y otro simplemente para los niños, entonces debería ser capaz de definir cómo se comporta cada tipo de elemento en el árbol. Así que cree un estilo para cada tipo de elemento, luego para el nodo de la carpeta simplemente cambie el desencadenador para que se seleccione para no hacer nada.

+1

pero ¿cómo evitarías que treeview seleccione semánticamente el nodo de nivel superior? ocultando el hecho de que el ca Tegory se selecciona con estilos visuales puede no ser suficiente –

0

que he escrito en la propiedad adjunta que anular la selección de un TreeViewItem tan pronto como se selecciona:

public class TreeViewItemHelper 
{ 
    public static bool GetIsSelectable(TreeViewItem obj) 
    { 
     return (bool)obj.GetValue(IsSelectableProperty); 
    } 

    public static void SetIsSelectable(TreeViewItem obj, bool value) 
    { 
     obj.SetValue(IsSelectableProperty, value); 
    } 

    public static readonly DependencyProperty IsSelectableProperty = 
     DependencyProperty.RegisterAttached("IsSelectable", typeof(bool), typeof(TreeViewItemHelper), new UIPropertyMetadata(true, IsSelectablePropertyChangedCallback)); 

    private static void IsSelectablePropertyChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs args) 
    { 
     TreeViewItem i = (TreeViewItem) o; 
     i.Selected -= OnSelected; 
     if(!GetIsSelectable(i)) 
     { 
      i.Selected += OnSelected; 
     } 
    } 

    private static void OnSelected(object sender, RoutedEventArgs args) 
    { 
     if(sender==args.Source) 
     { 
      TreeViewItem i = (TreeViewItem)sender; 
      i.IsSelected = false; 
     } 
    } 
} 

Desafortunadamente aún así perder la selección de edad cuando se hace clic en un elemento no seleccionable :(

5

Definir estilos para cada tipo de elementos, como Bijington escribió. para nodos no seleccionables establece la Propiedad enfocable del contenedor (TreeViewItem para TreeViews) en falso