Articles in this section

How to highlight the entire TreeViewItemAdv row when it is selected or mouseover in WPF TreeViewAdv?

In WPF TreeViewAdv , during the TreeViewItemAdv loaded event, you can set the MouseOverBackground color for each TreeViewItemAdv using its SelectedRectangle.

<syncfusion:TreeViewAdv x:Name="tree"
                        ItemsSource="{Binding TreeItems}"
                        MouseOverBackground="GreenYellow"
                        SelectedBackground="SkyBlue">

    <syncfusion:TreeViewAdv.ItemContainerStyle>
        <Style TargetType="{x:Type syncfusion:TreeViewItemAdv}">
            <EventSetter Event="Loaded"
                         Handler="FrameworkElement_OnLoaded" />
        </Style>
    </syncfusion:TreeViewAdv.ItemContainerStyle>

</syncfusion:TreeViewAdv>
private void FrameworkElement_OnLoaded(object sender, RoutedEventArgs e)
{
    object saveitem = sender;
    int itemlevel = 1;

    // Calculate the nesting level of the TreeViewItemAdv
    for (int i = 0; i < 100; i++)
    {
        if ((sender as TreeViewItemAdv).ParentItemsControl is TreeViewAdv)
        {
            sender = saveitem;
            break;
        }
        else
        {
            itemlevel++;
            sender = (sender as TreeViewItemAdv).ParentItemsControl as TreeViewItemAdv;
        }
    }

    // --- TreeView Root Level Items ---

    // By using the VisualUtils to find the SelectedRectangle.
    SelectRectangle rectangle = VisualUtils.FindDescendant((sender as TreeViewItemAdv) as Visual, typeof(SelectRectangle)) as SelectRectangle;
    Border border = (sender as TreeViewItemAdv).Template.FindName("Bd", (sender as TreeViewItemAdv)) as Border;

    border.Width = (sender as TreeViewItemAdv).ActualWidth;
    border.Margin = new Thickness(-(rectangle.ActualWidth * itemlevel), 0, 0, 0);
    border.Padding = new Thickness(rectangle.ActualWidth * itemlevel, 0, 0, 0);

    Binding RootBinding = new Binding() 
    { 
        Source = border, 
        Path = new PropertyPath("Background"), 
        Mode = BindingMode.TwoWay 
    };
    rectangle.SetBinding(SelectRectangle.FillProperty, RootBinding);

    // --- TreeView SubItems ---
    foreach (var item in VisualUtils.EnumChildrenOfType(sender as TreeViewItemAdv, typeof(TreeViewItemAdv)))
    {
        SelectRectangle subrectangle = VisualUtils.FindDescendant((item as TreeViewItemAdv) as Visual, typeof(SelectRectangle)) as SelectRectangle;
        Border subborder = (sender as TreeViewItemAdv).Template.FindName("Bd", (item as TreeViewItemAdv)) as Border;

        subborder.Width = (sender as TreeViewItemAdv).ActualWidth;
        border.Margin = new Thickness(-(rectangle.ActualWidth * itemlevel), 0, 0, 0);
        border.Padding = new Thickness(rectangle.ActualWidth * itemlevel, 0, 0, 0);

        Binding SubBinding = new Binding() 
        { 
            Source = subborder, 
            Path = new PropertyPath("Background"), 
            Mode = BindingMode.TwoWay 
        };
        subrectangle.SetBinding(SelectRectangle.FillProperty, SubBinding);
    }
}

The above code example explains how to set the MouseOverBackground color for each TreeViewItemAdv using its SelectedRectangle and the screenshot is as follows.


  

Figure 1: MouseOverBackground color set for each TreeViewItemAdv



Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Access denied
Access denied