Can I control which nodes can be selected in WPF TreeView?

I have a two-level hierarchy displayed in WPF TreeView, but I want the child nodes to be selected - basically the top-level nodes are for categorization, but should not be selected on their own.

Can i achieve this?

Thanks...

+5
source share
3 answers

Define styles for each type of item, for example, Bijington writes. for non-selectable nodes, set the Focusable-Property of the container (TreeViewItem for TreeViews) to false.

+5
source

treeview. , (im, ), , , . , node , .

+2

I wrote in an attached property that deselects treeviewitem immediately after selecting it:

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

Unfortunately, you still lose the old selection when you click on a non-selectable item :(

0
source

All Articles