【发布时间】:2020-08-31 09:57:56
【问题描述】:
我在运行时在我的TreeView 中创建了一个简单的树。
每个TreeViewItem 都有一个鼠标双击事件,该事件应该打印出所单击项目的标题以及与该项目相关的一些信息。但是,如果双击 6,该事件将在 6 上触发,并在每个项目中冒泡。即使handled设置为true。
<Window x:Class="TreeBubbleIssue.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TreeView Name="TestingTree" />
</Grid>
</Window>
using System;
using System.Diagnostics;
using System.Linq;
using System.Windows.Controls;
namespace TreeBubbleIssue
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
RunTimeGeneratedTree();
}
private void RunTimeGeneratedTree()
{
TreeViewItem first = new TreeViewItem { Header = 1 };
string randomString = RandomString();
first.MouseDoubleClick += (sender, args) =>
{
Debug.WriteLine($"{first.Header}: {randomString}");
args.Handled = true;
};
TreeViewItem last = first;
for (int i = 2; i <= 6; i++)
{
TreeViewItem item = new TreeViewItem { Header = i };
string otherInfoFromElseWhere = RandomString();
item.MouseDoubleClick += (sender, args) =>
{
Debug.WriteLine($"{item.Header}: {otherInfoFromElseWhere}");
args.Handled = true;
};
last.Items.Add(item);
last = item;
}
TestingTree.Items.Add(first);
}
private static readonly Random Random = new Random();
public static string RandomString()
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return new string(Enumerable.Repeat(chars, 50)
.Select(s => s[Random.Next(s.Length)]).ToArray());
}
}
}
【问题讨论】:
-
一个 teeviewitem 是一个 headereditems 控件。 1 包含 2,其中包含 3。您正在查看的所有内容都在 treeviewitem 1 中。