2025-09-12 12:03:20 +08:00

105 lines
3.8 KiB
C#

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
{
/// <summary>
/// DialogIODistribution.xaml 的交互逻辑
/// </summary>
public partial class DialogIODistribution : UserControl
{
IEventAggregator _eventAggregator;
public DialogIODistribution()
{
InitializeComponent();
DataContext = new DialogIODistributionViewModel();
_eventAggregator = GlobalObject.container.Resolve<IEventAggregator>();
_eventAggregator.GetEvent<ScrollToItemEvent>().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<RadTreeViewItem>(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<T>(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<string>;
var ph = string.Join("\\", pathls);
treeView1.BringPathIntoView(ph);
}
}
}