Reputation: 11835
I have the following pieces of code which should create a tree. Each item of that tree should change its background when it is hovered.
XAML:
<TreeView Name="treeView">
<TreeViewItem Header="Item 1" IsExpanded="True">
<TreeViewItem Header="Item 1.1" IsExpanded="True">
<TreeViewItem Header="Item 1.1.1"/>
<TreeViewItem Header="Item 1.1.1"/>
</TreeViewItem>
<TreeViewItem Header="Item 1.2"/>
</TreeViewItem>
</TreeView>
C# Code behind:
class MainWindow : Window
{
// ...
private void SetEventHandlersOn(ItemCollection items)
{
foreach (TreeViewItem item in items)
{
item.MouseEnter += ItemMouseEnter;
item.MouseLeave += ItemMouseLeave;
SetEventHandlersOn(item.Items);
}
}
private void ItemMouseEnter(object sender, MouseEventArgs e)
{
var treeViewItem = sender as TreeViewItem;
treeViewItem.Background = Brushes.LimeGreen;
e.Handled = true;
}
private void ItemMouseLeave(object sender, MouseEventArgs e)
{
var treeViewItem = sender as TreeViewItem;
treeViewItem.Background = Brushes.White;
e.Handled = true;
}
}
Instead of doing what I need the tree appears differently. When I hover an item, it becomes highlighted, but its parent items are also highlighted for some reason.
How can I solve the problem?
UPD1 I see that my problem is very similar to the problem described here but I haven't understood yet how to apply the solution.
Upvotes: 1
Views: 1617
Reputation: 41
you should check for e.Handled state in your handler like this:
private void ItemMouseEnter(object sender, MouseEventArgs e)
{
if (!e.Handled)
{
var treeViewItem = sender as TreeViewItem;
treeViewItem.Background = Brushes.LimeGreen;
e.Handled = true;
}
}
then it will be handled only once.
Upvotes: 4