WPF学习笔记

WPF学习笔记


TreeView

<pre><code class="language-csharp">&amp;lt;TreeView x:Name=&amp;quot;Mytreeview&amp;quot;&amp;gt; &amp;lt;TreeViewItem&amp;gt; &amp;lt;TreeViewItem.Header&amp;gt; &amp;lt;StackPanel Orientation=&amp;quot;Horizontal&amp;quot;&amp;gt; &amp;lt;Image Source=&amp;quot;image/1.png&amp;quot;&amp;gt;&amp;lt;/Image&amp;gt; &amp;lt;TextBlock Text=&amp;quot;12332&amp;quot;&amp;gt;&amp;lt;/TextBlock&amp;gt; &amp;lt;/StackPanel&amp;gt; &amp;lt;/TreeViewItem.Header&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;123&amp;quot;&amp;gt;&amp;lt;/TreeViewItem&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;456&amp;quot;&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;789&amp;quot;&amp;gt;&amp;lt;/TreeViewItem&amp;gt; &amp;lt;/TreeViewItem&amp;gt; &amp;lt;/TreeViewItem&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;Emp&amp;quot; IsSelected=&amp;quot;True&amp;quot;&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;123&amp;quot;&amp;gt;&amp;lt;/TreeViewItem&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;456&amp;quot;&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;789&amp;quot;&amp;gt;&amp;lt;/TreeViewItem&amp;gt; &amp;lt;/TreeViewItem&amp;gt; &amp;lt;/TreeViewItem&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;Empsss&amp;quot;&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;123&amp;quot;&amp;gt;&amp;lt;/TreeViewItem&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;456&amp;quot;&amp;gt; &amp;lt;TreeViewItem Header=&amp;quot;789&amp;quot;&amp;gt;&amp;lt;/TreeViewItem&amp;gt; &amp;lt;/TreeViewItem&amp;gt; &amp;lt;/TreeViewItem&amp;gt; &amp;lt;/TreeView&amp;gt; &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; /// TreeView.xaml 的交互逻辑 /// &amp;lt;/summary&amp;gt; public partial class TreeView : Window { public TreeView() { 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 = 4, Name = &amp;quot;教学管理&amp;quot;, ParenId = 2 }, 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 = 2 }, new TreeViewNode { Id = 8, Name = &amp;quot;课程管理&amp;quot;, ParenId = 2 }, new TreeViewNode { Id = 40, Name = &amp;quot;作业管理&amp;quot;, ParenId = 1 }, new TreeViewNode { Id = 41, Name = &amp;quot;课程数据&amp;quot;, ParenId = 40 }, new TreeViewNode { Id = 42, Name = &amp;quot;粉丝数据&amp;quot;, ParenId = 40 } }; var treeNodes = BuildTree(_men); treeviews.ItemsSource = treeNodes; } private void treeviews_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs&amp;lt;object&amp;gt; e) { var selectvalue = (treeviews.SelectedValue as TreeViewItem).Tag as TreeViewNode; var selectitem = (treeviews.SelectedItem as TreeViewItem).Tag as TreeViewNode; } 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) { // 创建上下文菜单 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; } } /// &amp;lt;summary&amp;gt; /// 根节点功能 /// &amp;lt;/summary&amp;gt; /// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/param&amp;gt; /// &amp;lt;param name=&amp;quot;e&amp;quot;&amp;gt;&amp;lt;/param&amp;gt; private void MenuItem_Click(object sender, RoutedEventArgs e) { MessageBox.Show(&amp;quot;根节点&amp;quot;); } }</code></pre>

页面列表

ITEM_HTML