This commit is contained in:
kwai
2023-08-04 19:03:42 +08:00
parent 25cd232579
commit 25993fd3a9
4 changed files with 80 additions and 6 deletions

View File

@@ -5,6 +5,7 @@ using System.Linq;
using System.Threading;
using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Input;
using System.Windows.Media;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
@@ -12,6 +13,16 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls
{
public class DragThumb : Thumb
{
public static readonly DependencyProperty EditClickCountProperty = DependencyProperty.Register(
nameof(EditClickCount), typeof(int), typeof(DragThumb), new FrameworkPropertyMetadata(
2));
public int EditClickCount
{
get => (int)GetValue(EditClickCountProperty);
set => SetValue(EditClickCountProperty, value);
}
public DragThumb()
{
base.DragDelta += new DragDeltaEventHandler(DragThumb_DragDelta);
@@ -23,6 +34,15 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls
{
get;set;
}
private SelectableDesignerItemViewModelBase DesignerItem
{
get
{
return DataContext as SelectableDesignerItemViewModelBase;
}
}
private List<SelectableDesignerItemViewModelBase> designerItems;
private bool drag;
@@ -174,6 +194,49 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls
}
}
#region
private Point? firstPoint;
protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnPreviewMouseLeftButtonDown(e);
if (EditClickCount == 1)
{
if (e.LeftButton == MouseButtonState.Pressed && firstPoint == null)
{
firstPoint = e.GetPosition(this);
DesignerItem.PreviewExecuteEdit();
}
}
}
protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnPreviewMouseLeftButtonDown(e);
if (EditClickCount == 1)
{
if (firstPoint == e.GetPosition(this))
{
DesignerItem.EditCommand?.Execute(e.GetPosition(this));
firstPoint = null;
}
}
}
protected override void OnPreviewMouseDoubleClick(MouseButtonEventArgs e)
{
base.OnPreviewMouseDoubleClick(e);
if (EditClickCount == 2)
{
DesignerItem.EditCommand?.Execute(e.GetPosition(this));
e.Handled = true;
}
}
#endregion
private DesignerCanvas GetDesignerCanvas(DependencyObject element)
{
while (element != null && !(element is DesignerCanvas))