2008-10-30 5 views

Répondre

2

Pour ce faire vous auriez donc besoin de passer outre le style de TreeView. Idéalement, vous aurez deux types d'éléments treeview un pour vos nœuds de haut niveau (im en supposant des dossiers) et un autre simplement pour les enfants, alors vous devriez être capable de définir comment se comporte chaque type d'élément dans l'arbre. Donc, créez un style pour chaque type d'élément, puis pour le nœud de dossier, modifiez simplement le déclencheur pour est sélectionné pour ne rien faire.

+1

mais comment empêcher l'arborescence de sélectionner sémantiquement le nœud de niveau supérieur? cacher le fait que le ca tegory est sélectionné avec des styles visuels peuvent ne pas être assez –

0

J'ai écrit à la propriété ci-joint qui désélectionnera un TreeViewItem dès qu'il est sélectionné:

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; 
     } 
    } 
} 

Malheureusement vous perdez encore l'ancienne sélection lorsque vous cliquez sur un élément unselectable :(

5

Définir mais pour les nœuds non sélectionnables, définissez la propriété Focusable-Property du conteneur (TreeViewItem for TreeViews) sur false