105 lines
3.8 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|