using Serein.NodeFlow; using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace Serein.WorkBench.Node.View { /// /// UserControl1.xaml 的交互逻辑 /// public partial class DllControl : UserControl { public DllControl() { Header = "DLL文件"; // 设置初始值 InitializeComponent(); } /// /// Header 依赖属性,用于绑定标题 /// public string Header { get { return (string)GetValue(HeaderProperty); } set { SetValue(HeaderProperty, value); } } public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register("Header", typeof(string), typeof(DllControl), new PropertyMetadata(string.Empty)); /// /// 向动作面板添加类型的文本块 /// /// 要添加的类型 public void AddAction(MethodDetails md) { AddTypeToListBox(md, ActionsListBox); } /// /// 向触发器面板添加类型的文本块 /// /// 要添加的类型 public void AddFlipflop(MethodDetails md) { AddTypeToListBox(md, FlipflopsListBox); } /// /// 向指定面板添加类型的文本块 /// /// 要添加的类型 /// 要添加到的面板 private void AddTypeToListBox(MethodDetails md, ListBox listBox) { // 创建一个新的 TextBlock 并设置其属性 TextBlock typeText = new TextBlock { Text = $"{md.MethodTips}", Margin = new Thickness(10, 2, 0, 0), Tag = md }; // 为 TextBlock 添加鼠标左键按下事件处理程序 typeText.MouseLeftButtonDown += TypeText_MouseLeftButtonDown; // 为 TextBlock 添加鼠标移动事件处理程序 typeText.MouseMove += TypeText_MouseMove; // 将 TextBlock 添加到指定的面板 listBox.Items.Add(typeText); } /// /// 存储拖拽开始时的鼠标位置 /// private Point _dragStartPoint; /// /// 处理 TextBlock 的鼠标左键按下事件 /// /// 事件源 /// 事件参数 private void TypeText_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { // 记录鼠标按下时的位置 _dragStartPoint = e.GetPosition(null); } /// /// 处理 TextBlock 的鼠标移动事件 /// /// 事件源 /// 事件参数 private void TypeText_MouseMove(object sender, MouseEventArgs e) { // 获取当前鼠标位置 Point mousePos = e.GetPosition(null); // 计算鼠标移动的距离 Vector diff = _dragStartPoint - mousePos; // 判断是否符合拖拽的最小距离要求 if (e.LeftButton == MouseButtonState.Pressed && (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance || Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)) { // 获取触发事件的 TextBlock TextBlock typeText = sender as TextBlock; if (typeText != null) { // 创建一个 DataObject 用于拖拽操作,并设置拖拽效果 DataObject dragData = new DataObject(MouseNodeType.DllNodeType, typeText.Tag); DragDrop.DoDragDrop(typeText, dragData, DragDropEffects.Move); } } } } }