事件Demo完成

This commit is contained in:
艾竹
2023-02-12 11:02:20 +08:00
parent 8a50854868
commit 98392f377b
10 changed files with 808 additions and 13 deletions

View File

@@ -20,8 +20,10 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls
private List<SelectableDesignerItemViewModelBase> designerItems;
private bool drag;
private void DragThumb_DragStarted(object sender, DragStartedEventArgs e)
{
drag = false;
SelectableDesignerItemViewModelBase designerItem = this.DataContext as SelectableDesignerItemViewModelBase;
if (designerItem != null && designerItem.IsSelected)
@@ -56,17 +58,19 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls
designerItems = null;
}
}
private void DragThumb_DragCompleted(object sender, DragCompletedEventArgs e)
{
if (drag == false) return;
if (designerItems != null)
{
foreach (DesignerItemViewModelBase item in designerItems.OfType<DesignerItemViewModelBase>())
{
{
item.SetCellAlignment();
item.BeginDo = false;
item.RaiseTopLeft();
}
}
e.Handled = true;
}
@@ -74,10 +78,11 @@ namespace AIStudio.Wpf.DiagramDesigner.Controls
void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
{
drag = true;
if (designerItems != null)
{
double minLeft = double.MaxValue;
double minTop = double.MaxValue;
double minTop = double.MaxValue;
foreach (DesignerItemViewModelBase item in designerItems.OfType<DesignerItemViewModelBase>())
{

View File

@@ -129,7 +129,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
Size size = _pageSize;
switch (PageSizeType)
{
{
case PageSizeType.A3: size = new Size(297, 420); break;
case PageSizeType.A4: size = new Size(210, 297); break;
case PageSizeType.A5: size = new Size(148, 210); break;
@@ -230,7 +230,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
set
{
_gridCellSize.Height = value;
_gridCellSize.Height = value;
RaisePropertyChanged(nameof(PhysicalGridCellHeight));
RaisePropertyChanged(nameof(GridCellSize));
}
@@ -682,7 +682,10 @@ namespace AIStudio.Wpf.DiagramDesigner
}
#endregion
private DoCommandManager DoCommandManager = new DoCommandManager();
private DoCommandManager DoCommandManager = new DoCommandManager();
public event DiagramEventHandler Event;
public DiagramViewModel()
{
CreateNewDiagramCommand = new SimpleCommand(ExecuteEnable, ExecuteCreateNewDiagramCommand);
@@ -727,7 +730,7 @@ namespace AIStudio.Wpf.DiagramDesigner
Items.CollectionChanged += Items_CollectionChanged;
}
public DiagramViewModel(DiagramItem diagramItem) :this()
public DiagramViewModel(DiagramItem diagramItem) : this()
{
DiagramType = diagramItem.DiagramType;
ShowGrid = diagramItem.ShowGrid;
@@ -741,7 +744,7 @@ namespace AIStudio.Wpf.DiagramDesigner
GridColor = diagramItem.GridColor;
}
public bool ExecuteEnable(object para)
public bool ExecuteEnable(object para)
{
return IsReadOnly == false;
}
@@ -815,13 +818,18 @@ namespace AIStudio.Wpf.DiagramDesigner
if (designer.BeginDo) return;
}
var selectable = sender as SelectableViewModelBase;
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
var property = sender.GetType().GetProperty(e.PropertyName);
var attr = property.GetCustomAttributes(typeof(CanDoAttribute), true);
if (attr != null && attr.Length != 0)
{
//加入ReDo
DoCommandManager.DoNewCommand(sender.ToString() + e.PropertyName, () => Do(sender, e.PropertyName, valuePropertyChangedEventArgs.NewValue), () => UnDo(sender, e.PropertyName, valuePropertyChangedEventArgs.OldValue), null, false);
Event?.Invoke(sender, new DiagramEventArgs(valuePropertyChangedEventArgs.PropertyName, valuePropertyChangedEventArgs.NewValue, valuePropertyChangedEventArgs.OldValue, selectable?.Id));
}
}
}
@@ -1922,8 +1930,4 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
}

View File

@@ -146,6 +146,7 @@ namespace AIStudio.Wpf.DiagramDesigner
private bool _isSelected;
[Browsable(false)]
[CanDo]
public bool IsSelected
{
get

View File

@@ -182,6 +182,8 @@ namespace AIStudio.Wpf.DiagramDesigner
get;
}
event DiagramEventHandler Event;
Func<SelectableDesignerItemViewModelBase, bool> OutAddVerify
{
get; set;
@@ -294,4 +296,30 @@ namespace AIStudio.Wpf.DiagramDesigner
event PropertyChangedEventHandler PropertyChanged;
}
public delegate void DiagramEventHandler(object sender, DiagramEventArgs e);
public class DiagramEventArgs : PropertyChangedEventArgs
{
public DiagramEventArgs(string propertyName, object oldValue, object newValue, Guid? id) : base(propertyName)
{
OldValue = oldValue;
NewValue = newValue;
Id = id;
}
public object OldValue
{
get; set;
}
public object NewValue
{
get; set;
}
public Guid? Id
{
get; set;
}
}
}