WPF学习笔记

WPF学习笔记


Treeview点击事件

<pre><code class="language-csharp">&amp;lt;TreeView Name=&amp;quot;treeviews&amp;quot; PreviewMouseRightButtonDown=&amp;quot;treeviews_PreviewMouseRightButtonDown&amp;quot;&amp;gt; &amp;lt;TreeView.ItemTemplate&amp;gt; &amp;lt;HierarchicalDataTemplate ItemsSource=&amp;quot;{Binding Children}&amp;quot;&amp;gt; &amp;lt;TextBlock Text=&amp;quot;{Binding Name}&amp;quot; /&amp;gt; &amp;lt;/HierarchicalDataTemplate&amp;gt; &amp;lt;/TreeView.ItemTemplate&amp;gt; &amp;lt;/TreeView&amp;gt; /// &amp;lt;summary&amp;gt; /// TreeviewDown.xaml 的交互逻辑 /// &amp;lt;/summary&amp;gt; public partial class TreeviewDown : Window { public TreeviewDown() { InitializeComponent(); var _men = new List&amp;lt;TreeViewNode&amp;gt;() { new TreeViewNode { Id = 1, Name = &amp;quot;根目录&amp;quot;, ParenId = 0 }, new TreeViewNode { Id = 2, Name = &amp;quot;财务管理&amp;quot;, ParenId = 1 }, new TreeViewNode { Id = 3, Name = &amp;quot;教学管理&amp;quot;, ParenId = 1 }, new TreeViewNode { Id = 4, Name = &amp;quot;数据统计&amp;quot;, ParenId = 1 }, new TreeViewNode { Id = 5, Name = &amp;quot;订单管理&amp;quot;, ParenId = 2 }, new TreeViewNode { Id = 6, Name = &amp;quot;结算管理&amp;quot;, ParenId = 2 }, new TreeViewNode { Id = 7, Name = &amp;quot;课程管理&amp;quot;, ParenId = 3 }, new TreeViewNode { Id = 8, Name = &amp;quot;作业管理&amp;quot;, ParenId = 3 }, new TreeViewNode { Id = 9, Name = &amp;quot;zzz&amp;quot;, ParenId = 8 }, new TreeViewNode { Id = 10, Name = &amp;quot;zccc&amp;quot;, ParenId = 8 }, new TreeViewNode { Id =11, Name = &amp;quot;课程数据&amp;quot;, ParenId = 4 }, new TreeViewNode { Id = 12, Name = &amp;quot;粉丝数据&amp;quot;, ParenId = 4 }, new TreeViewNode { Id = 13, Name = &amp;quot;zzz&amp;quot;, ParenId = 7 }, new TreeViewNode { Id = 14, Name = &amp;quot;zccc&amp;quot;, ParenId = 7 }, }; var treeNodes = BuildTree(_men); treeviews.ItemsSource = treeNodes; } private List&amp;lt;TreeViewNode&amp;gt; BuildTree(List&amp;lt;TreeViewNode&amp;gt; nodes, int parentId = 0) { return nodes .Where(n =&amp;gt; n.ParenId == parentId) .Select(n =&amp;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;&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 = &amp;quot;选项 1&amp;quot; }; menuItem1.Click += (s, e) =&amp;gt; MessageBox.Show($&amp;quot;选项 1 被点击,数据: {data.Name}&amp;quot;); contextMenu.Items.Add(menuItem1); MenuItem menuItem2 = new MenuItem { Header = &amp;quot;选项 2&amp;quot; }; menuItem2.Click += (s, e) =&amp;gt; MessageBox.Show($&amp;quot;选项 2 被点击,数据: {data.Name}&amp;quot;); contextMenu.Items.Add(menuItem2); // 将上下文菜单分配给TreeViewItem并显示 item.ContextMenu = contextMenu; contextMenu.IsOpen = true; } } }</code></pre>

页面列表

ITEM_HTML