using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using Prism.Events; using SWS.CAD.Event; using SWS.CAD.ViewModels; using SWS.Commons; using Telerik.Windows.Controls; using Unity; namespace SWS.CAD.Views.Dialog { /// /// DialogIODistribution.xaml 的交互逻辑 /// public partial class DialogIODistribution : UserControl { IEventAggregator _eventAggregator; public DialogIODistribution() { InitializeComponent(); DataContext = new DialogIODistributionViewModel(); _eventAggregator = GlobalObject.container.Resolve(); _eventAggregator.GetEvent().Subscribe(ScrollToSelectedItem, ThreadOption.UIThread, true); } private void RadTreeView_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { var treeView = sender as RadTreeView; var originalSource = e.OriginalSource as DependencyObject; // 查找被点击的 RadTreeViewItem var clickedItem = VisualUpwardSearch(originalSource); if (clickedItem != null && clickedItem.DataContext is Model.TreeModel treeNode) { dynamic dynamicObj = treeNode.NodeExtData; string PanelIDValue = dynamicObj.PanelID; // 选中节点并显示菜单 clickedItem.IsSelected = true; //ContextMenu cm = (ContextMenu)FindResource("NodeContextMenu1"); // 获取右键菜单 var cm = TreeItemContextMenu; cm.Items.Clear(); // 清空现有菜单项 var x = DataContext as DialogIODistributionViewModel; if (treeNode.NodeType.Equals("1") && treeNode.ID.Equals(PanelIDValue)) { cm.Items.Add(new MenuItem { Header = "采集箱属性", Command = x.MouseRightCmd, CommandParameter = treeNode }); } //else if(treeNode.NodeType.Equals("1") && treeNode.parentId.Equals(PanelIDValue)) else { // 创建父级菜单项(迁移到) var moveMenuItem = new MenuItem { Header = "迁移到" }; foreach (Model.TreeModel item in treeView.ItemsSource) { foreach (var item1 in item.ChildNodes) { var subItem = new MenuItem { Header = item1.Text, Command = x.MouseRightCmd, // 需要创建新命令 CommandParameter = item1.ID+","+treeNode.ID }; moveMenuItem.Items.Add(subItem); } } cm.Items.Add(moveMenuItem); } cm.PlacementTarget = clickedItem; cm.IsOpen = true; e.Handled = true; } } // 辅助方法:向上查找父级 TreeViewItem private T VisualUpwardSearch(DependencyObject source) where T : DependencyObject { while (source != null && !(source is T)) { source = VisualTreeHelper.GetParent(source); } return source as T; } // 滚动到选中项 private void ScrollToSelectedItem(object path) { var pathls = path as List; var ph = string.Join("\\", pathls); treeView1.BringPathIntoView(ph); } } }