Treeview点击事件
<pre><code class="language-csharp">&lt;TreeView Name=&quot;treeviews&quot; PreviewMouseRightButtonDown=&quot;treeviews_PreviewMouseRightButtonDown&quot;&gt;
&lt;TreeView.ItemTemplate&gt;
&lt;HierarchicalDataTemplate ItemsSource=&quot;{Binding Children}&quot;&gt;
&lt;TextBlock Text=&quot;{Binding Name}&quot; /&gt;
&lt;/HierarchicalDataTemplate&gt;
&lt;/TreeView.ItemTemplate&gt;
&lt;/TreeView&gt;
/// &lt;summary&gt;
/// TreeviewDown.xaml 的交互逻辑
/// &lt;/summary&gt;
public partial class TreeviewDown : Window
{
public TreeviewDown()
{
InitializeComponent();
var _men = new List&lt;TreeViewNode&gt;()
{
new TreeViewNode { Id = 1, Name = &quot;根目录&quot;, ParenId = 0 },
new TreeViewNode { Id = 2, Name = &quot;财务管理&quot;, ParenId = 1 },
new TreeViewNode { Id = 3, Name = &quot;教学管理&quot;, ParenId = 1 },
new TreeViewNode { Id = 4, Name = &quot;数据统计&quot;, ParenId = 1 },
new TreeViewNode { Id = 5, Name = &quot;订单管理&quot;, ParenId = 2 },
new TreeViewNode { Id = 6, Name = &quot;结算管理&quot;, ParenId = 2 },
new TreeViewNode { Id = 7, Name = &quot;课程管理&quot;, ParenId = 3 },
new TreeViewNode { Id = 8, Name = &quot;作业管理&quot;, ParenId = 3 },
new TreeViewNode { Id = 9, Name = &quot;zzz&quot;, ParenId = 8 },
new TreeViewNode { Id = 10, Name = &quot;zccc&quot;, ParenId = 8 },
new TreeViewNode { Id =11, Name = &quot;课程数据&quot;, ParenId = 4 },
new TreeViewNode { Id = 12, Name = &quot;粉丝数据&quot;, ParenId = 4 },
new TreeViewNode { Id = 13, Name = &quot;zzz&quot;, ParenId = 7 },
new TreeViewNode { Id = 14, Name = &quot;zccc&quot;, ParenId = 7 },
};
var treeNodes = BuildTree(_men);
treeviews.ItemsSource = treeNodes;
}
private List&lt;TreeViewNode&gt; BuildTree(List&lt;TreeViewNode&gt; nodes, int parentId = 0)
{
return nodes
.Where(n =&gt; n.ParenId == parentId)
.Select(n =&gt; new TreeViewNode
{
Id = n.Id,
Name = n.Name,
ParenId = n.ParenId,
Children = BuildTree(nodes, n.Id)
})
.ToList();
}
private void treeviews_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
DependencyObject source = e.OriginalSource as DependencyObject;
while (source != null &amp;&amp; !(source is TreeViewItem))
{
source = VisualTreeHelper.GetParent(source);
}
if (source != null)
{
TreeViewItem item = source as TreeViewItem;
if (item != null)
{
item.Focus(); // 设置焦点以确保该项被选中
CreateContextMenu(item);
e.Handled = true; // 标记事件已处理
}
}
}
private void CreateContextMenu(TreeViewItem item)
{
// 获取TreeViewItem绑定的数据对象
var data = item.DataContext as TreeViewNode;
if (data != null)
{
// 如果 ParenId == 1,则不显示上下文菜单
if (data.ParenId == 1)
{
return;
}
// 创建上下文菜单
ContextMenu contextMenu = new ContextMenu();
// 添加菜单项并为其注册事件处理程序
MenuItem menuItem1 = new MenuItem { Header = &quot;选项 1&quot; };
menuItem1.Click += (s, e) =&gt; MessageBox.Show($&quot;选项 1 被点击,数据: {data.Name}&quot;);
contextMenu.Items.Add(menuItem1);
MenuItem menuItem2 = new MenuItem { Header = &quot;选项 2&quot; };
menuItem2.Click += (s, e) =&gt; MessageBox.Show($&quot;选项 2 被点击,数据: {data.Name}&quot;);
contextMenu.Items.Add(menuItem2);
// 将上下文菜单分配给TreeViewItem并显示
item.ContextMenu = contextMenu;
contextMenu.IsOpen = true;
}
}
}</code></pre>