| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- using System;
- using System.ComponentModel.Composition;
- using System.Windows;
- using System.Windows.Input;
- using Infrastructure;
- namespace Modules.BehaviorTree
- {
- /// <summary>
- /// BehaviorTreeView.xaml 的交互逻辑
- /// </summary>
- [ViewExport(RegionName = "BehaviorTreeRegion"), PartCreationPolicy(CreationPolicy.NonShared)]
- public partial class BehaviorTreeView
- {
- private const double DragThreshold = 5;
- private bool isDragging;
- private bool isLeftButtonDown;
- private Point origMouseDownPoint;
- public BehaviorTreeView()
- {
- this.InitializeComponent();
- }
- [Import]
- private BehaviorTreeViewModel ViewModel
- {
- get
- {
- return this.DataContext as BehaviorTreeViewModel;
- }
- set
- {
- this.DataContext = value;
- }
- }
- private void MenuNewNode_Executed(object sender, ExecutedRoutedEventArgs e)
- {
- Point point = Mouse.GetPosition(this.listBox);
- var treeNode = new TreeNode(point.X, point.Y);
- // one root node
- if (this.ViewModel.TreeNodes.Count == 0)
- {
- this.ViewModel.Add(treeNode, null);
- }
- else
- {
- if (this.listBox.SelectedItem != null)
- {
- var treeNodeViewModel = this.listBox.SelectedItem as TreeNodeViewModel;
- this.ViewModel.Add(treeNode, treeNodeViewModel);
- }
- }
- this.listBox.SelectedItem = null;
- e.Handled = true;
- }
- private void MenuDeleteNode_Executed(object sender, ExecutedRoutedEventArgs e)
- {
- if (this.listBox.SelectedItem == null)
- {
- return;
- }
- var treeNodeViewModel = this.listBox.SelectedItem as TreeNodeViewModel;
- this.ViewModel.Remove(treeNodeViewModel);
- this.listBox.SelectedItem = null;
- e.Handled = true;
- }
- private void ListBoxItem_MouseDown(object sender, MouseButtonEventArgs e)
- {
- if (e.ChangedButton != MouseButton.Left)
- {
- return;
- }
- this.isLeftButtonDown = true;
- var item = (FrameworkElement) sender;
- var treeNodeViewModel = item.DataContext as TreeNodeViewModel;
- this.listBox.SelectedItem = treeNodeViewModel;
- this.origMouseDownPoint = e.GetPosition(this);
- item.CaptureMouse();
- e.Handled = true;
- }
- private void ListBoxItem_MouseUp(object sender, MouseButtonEventArgs e)
- {
- if (!this.isLeftButtonDown)
- {
- this.isDragging = false;
- return;
- }
- var item = (FrameworkElement) sender;
- var treeNodeViewModel = item.DataContext as TreeNodeViewModel;
- if (!this.isDragging)
- {
- this.listBox.SelectedItem = treeNodeViewModel;
- }
- this.isLeftButtonDown = false;
- this.isDragging = false;
- item.ReleaseMouseCapture();
- e.Handled = true;
- }
- private void ListBoxItem_MouseMove(object sender, MouseEventArgs e)
- {
- var item = (FrameworkElement) sender;
- var treeNodeViewModel = item.DataContext as TreeNodeViewModel;
- if (treeNodeViewModel == null)
- {
- return;
- }
- if (!treeNodeViewModel.IsRoot)
- {
- return;
- }
- Point curMouseDownPoint;
- Vector dragDelta;
- if (this.isDragging)
- {
- curMouseDownPoint = e.GetPosition(this);
- dragDelta = curMouseDownPoint - this.origMouseDownPoint;
- this.origMouseDownPoint = curMouseDownPoint;
- this.ViewModel.Move(dragDelta.X, dragDelta.Y);
- return;
- }
- if (!this.isLeftButtonDown)
- {
- return;
- }
- curMouseDownPoint = e.GetPosition(this);
- dragDelta = curMouseDownPoint - this.origMouseDownPoint;
- double dragDistance = Math.Abs(dragDelta.Length);
- if (dragDistance > DragThreshold)
- {
- this.isDragging = true;
- }
- e.Handled = true;
- }
- }
- }
|