mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-21 17:06:35 +08:00
调整了一下各种命令的位置,便于其他应用调用
This commit is contained in:
@@ -17,6 +17,7 @@ using System.Windows.Media;
|
||||
using System.Xml.Serialization;
|
||||
using AIStudio.Wpf.DiagramDesigner;
|
||||
using ZXing;
|
||||
using AIStudio.Wpf.DiagramDesigner.Helpers;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
{
|
||||
@@ -181,21 +182,6 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
return true;
|
||||
}
|
||||
|
||||
public void ReDoExecuted()
|
||||
{
|
||||
DiagramViewModel.RedoCommand.Execute(null);
|
||||
}
|
||||
|
||||
public void UnDoExecuted()
|
||||
{
|
||||
DiagramViewModel.UndoCommand.Execute(null);
|
||||
}
|
||||
|
||||
public void SelectedAllExecuted()
|
||||
{
|
||||
DiagramViewModel.SelectAllCommand.Execute(null);
|
||||
}
|
||||
|
||||
public static DiagramDocument OpenFile(string filename)
|
||||
{
|
||||
try
|
||||
@@ -289,7 +275,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
|
||||
|
||||
ConnectorViewModel connectionVM = new ConnectorViewModel(viewModel, sourceConnectorInfo, sinkConnectorInfo, connection, connection.VectorLineDrawMode);
|
||||
DesignerItemViewModelBase textItem = viewModel.Items.OfType<DesignerItemViewModelBase>().Single(x => x.ParentId == connection.Id);
|
||||
DesignerItemViewModelBase textItem = viewModel.Items.OfType<DesignerItemViewModelBase>().FirstOrDefault(x => x.ParentId == connection.Id);
|
||||
if (textItem != null)
|
||||
{
|
||||
connectionVM.OutTextItem = textItem;
|
||||
@@ -354,15 +340,15 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
ConnectionItem connection = new ConnectionItem(
|
||||
connectionVM.SourceConnectorInfo.DataItem.Id,
|
||||
connectionVM.SourceConnectorInfo.Orientation,
|
||||
DiagramItem.GetTypeOfDiagramItem(connectionVM.SourceConnectorInfo.DataItem),
|
||||
GetXRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
GetYRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
connectionVM.SourceConnectorInfo.DataItem.GetType(),
|
||||
connectionVM.GetXRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
connectionVM.GetYRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
connectionVM.SourceConnectorInfo.IsInnerPoint,
|
||||
sinkConnector.DataItem.Id,
|
||||
sinkConnector.Orientation,
|
||||
DiagramItem.GetTypeOfDiagramItem(sinkConnector.DataItem),
|
||||
GetXRatioFromConnector(sinkConnector),
|
||||
GetYRatioFromConnector(sinkConnector),
|
||||
sinkConnector.DataItem.GetType(),
|
||||
connectionVM.GetXRatioFromConnector(sinkConnector),
|
||||
connectionVM.GetYRatioFromConnector(sinkConnector),
|
||||
sinkConnector.IsInnerPoint,
|
||||
connectionVM);
|
||||
|
||||
@@ -385,225 +371,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
Status = "";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public void Paste()
|
||||
{
|
||||
if (Clipboard.ContainsData(DataFormats.Xaml))
|
||||
{
|
||||
String clipboardData = Clipboard.GetData(DataFormats.Xaml) as String;
|
||||
|
||||
if (String.IsNullOrEmpty(clipboardData))
|
||||
return;
|
||||
try
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> items = new List<SelectableDesignerItemViewModelBase>();
|
||||
DiagramItem copyitem = XmlSerializeHelper.DESerializer<DiagramItem>(clipboardData);
|
||||
|
||||
|
||||
Dictionary<Guid, Guid> mappingOldToNewIDs = new Dictionary<Guid, Guid>();
|
||||
|
||||
foreach (var diagramItemData in copyitem.AllDesignerItems)
|
||||
{
|
||||
DesignerItemViewModelBase newItem = null;
|
||||
|
||||
Guid newID = Guid.NewGuid();
|
||||
mappingOldToNewIDs.Add(diagramItemData.Id, newID);
|
||||
|
||||
diagramItemData.Id = newID;
|
||||
diagramItemData.Left += OffsetX;
|
||||
|
||||
diagramItemData.Top += OffsetY;
|
||||
Type type = TypeHelper.GetType(diagramItemData.ItemTypeName);
|
||||
|
||||
DesignerItemViewModelBase itemBase = (DesignerItemViewModelBase)Activator.CreateInstance(type, DiagramViewModel, diagramItemData);
|
||||
newItem = itemBase;
|
||||
|
||||
if (newItem != null)
|
||||
{
|
||||
if (newItem.ParentId != Guid.Empty)
|
||||
{
|
||||
newItem.ParentId = mappingOldToNewIDs[newItem.ParentId];
|
||||
}
|
||||
items.Add(newItem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
OffsetX += 10;
|
||||
OffsetY += 10;
|
||||
|
||||
foreach (var connection in copyitem.Connections)
|
||||
{
|
||||
Guid newID = Guid.NewGuid();
|
||||
|
||||
connection.SourceId = mappingOldToNewIDs[connection.SourceId];
|
||||
connection.SinkId = mappingOldToNewIDs[connection.SinkId];
|
||||
|
||||
connection.SourceType = System.Type.GetType(connection.SourceTypeName);
|
||||
connection.SinkType = System.Type.GetType(connection.SinkTypeName);
|
||||
DesignerItemViewModelBase sourceItem = GetConnectorDataItem(DiagramViewModel, connection.SourceId, connection.SourceType);
|
||||
ConnectorOrientation sourceConnectorOrientation = connection.SourceOrientation;
|
||||
FullyCreatedConnectorInfo sourceConnectorInfo = GetFullConnectorInfo(connection.Id, sourceItem, sourceConnectorOrientation, connection.SourceXRatio, connection.SourceYRatio, connection.SourceInnerPoint);
|
||||
|
||||
DesignerItemViewModelBase sinkItem = GetConnectorDataItem(DiagramViewModel, connection.SinkId, connection.SinkType);
|
||||
ConnectorOrientation sinkConnectorOrientation = connection.SinkOrientation;
|
||||
FullyCreatedConnectorInfo sinkConnectorInfo = GetFullConnectorInfo(connection.Id, sinkItem, sinkConnectorOrientation, connection.SinkXRatio, connection.SinkYRatio, connection.SinkInnerPoint);
|
||||
|
||||
ConnectorViewModel connectionVM = new ConnectorViewModel(DiagramViewModel, sourceConnectorInfo, sinkConnectorInfo, connection, connection.VectorLineDrawMode);
|
||||
items.Add(connectionVM);
|
||||
}
|
||||
|
||||
DiagramViewModel.DirectAddItemCommand.Execute(items);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show(e.StackTrace, e.Message, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void CopyCurrentSelection()
|
||||
{
|
||||
IEnumerable<SelectableDesignerItemViewModelBase> selectedDesignerItems =
|
||||
DiagramViewModel.SelectedItems.OfType<SelectableDesignerItemViewModelBase>();
|
||||
|
||||
List<ConnectorViewModel> selectedConnections =
|
||||
DiagramViewModel.SelectedItems.OfType<ConnectorViewModel>().ToList();
|
||||
|
||||
foreach (ConnectorViewModel connection in DiagramViewModel.Items.OfType<ConnectorViewModel>())
|
||||
{
|
||||
if (!selectedConnections.Contains(connection))
|
||||
{
|
||||
DesignerItemViewModelBase sourceItem = (from item in selectedDesignerItems.OfType<DesignerItemViewModelBase>()
|
||||
where item.Id == connection.SourceConnectorInfo.DataItem.Id
|
||||
select item).FirstOrDefault();
|
||||
|
||||
DesignerItemViewModelBase sinkItem = (from item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>()
|
||||
where item.Id == ((connection.SinkConnectorInfo as FullyCreatedConnectorInfo).DataItem).Id
|
||||
select item).FirstOrDefault();
|
||||
|
||||
if (sourceItem != null &&
|
||||
sinkItem != null &&
|
||||
DiagramViewModel.BelongToSameGroup(sourceItem, sinkItem))
|
||||
{
|
||||
selectedConnections.Add(connection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DiagramItem copyitem = new DiagramItem();
|
||||
copyitem.AddItems(selectedDesignerItems);
|
||||
|
||||
foreach (var connectionVM in selectedConnections.OfType<ConnectorViewModel>())
|
||||
{
|
||||
FullyCreatedConnectorInfo sinkConnector = connectionVM.SinkConnectorInfo as FullyCreatedConnectorInfo;
|
||||
|
||||
ConnectionItem connection = new ConnectionItem(
|
||||
connectionVM.SourceConnectorInfo.DataItem.Id,
|
||||
connectionVM.SourceConnectorInfo.Orientation,
|
||||
DiagramItem.GetTypeOfDiagramItem(connectionVM.SourceConnectorInfo.DataItem),
|
||||
GetXRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
GetYRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
connectionVM.SourceConnectorInfo.IsInnerPoint,
|
||||
sinkConnector.DataItem.Id,
|
||||
sinkConnector.Orientation,
|
||||
DiagramItem.GetTypeOfDiagramItem(sinkConnector.DataItem),
|
||||
GetXRatioFromConnector(sinkConnector),
|
||||
GetYRatioFromConnector(sinkConnector),
|
||||
sinkConnector.IsInnerPoint,
|
||||
connectionVM);
|
||||
|
||||
copyitem.ConnectionIds.Add(connectionVM.Id);
|
||||
copyitem.Connections.Add(connection);
|
||||
}
|
||||
string xml = XmlSerializeHelper.XmlSerialize<DiagramItem>(copyitem);
|
||||
|
||||
OffsetX = 10;
|
||||
OffsetY = 10;
|
||||
Clipboard.Clear();
|
||||
Clipboard.SetData(DataFormats.Xaml, xml);
|
||||
}
|
||||
|
||||
public void DeleteCurrentSelection()
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> itemsToRemove = DiagramViewModel.SelectedItems.OfType<SelectableDesignerItemViewModelBase>().ToList();
|
||||
List<SelectableDesignerItemViewModelBase> connectionsToAlsoRemove = new List<SelectableDesignerItemViewModelBase>();
|
||||
|
||||
foreach (var connector in DiagramViewModel.Items.OfType<ConnectorViewModel>())
|
||||
{
|
||||
if (ItemsToDeleteHasConnector(itemsToRemove, connector.SourceConnectorInfo))
|
||||
{
|
||||
connectionsToAlsoRemove.Add(connector);
|
||||
}
|
||||
|
||||
if (ItemsToDeleteHasConnector(itemsToRemove, connector.SinkConnectorInfo))
|
||||
{
|
||||
connectionsToAlsoRemove.Add(connector);
|
||||
}
|
||||
|
||||
}
|
||||
itemsToRemove.AddRange(connectionsToAlsoRemove);
|
||||
|
||||
DiagramViewModel.RemoveItemCommand.Execute(itemsToRemove);
|
||||
}
|
||||
|
||||
public void CutCurrentSelection()
|
||||
{
|
||||
CopyCurrentSelection();
|
||||
OffsetX = 0;
|
||||
OffsetY = 0;
|
||||
DeleteCurrentSelection();
|
||||
}
|
||||
|
||||
private double GetXRatioFromConnector(FullyCreatedConnectorInfo info)
|
||||
{
|
||||
if (info.IsInnerPoint)
|
||||
{
|
||||
return info.XRatio;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (info.Orientation)
|
||||
{
|
||||
case ConnectorOrientation.Top:
|
||||
return 0.5;
|
||||
case ConnectorOrientation.Left:
|
||||
return 0;
|
||||
case ConnectorOrientation.Bottom:
|
||||
return 0.5;
|
||||
case ConnectorOrientation.Right:
|
||||
return 1;
|
||||
default: return info.XRatio;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private double GetYRatioFromConnector(FullyCreatedConnectorInfo info)
|
||||
{
|
||||
if (info.IsInnerPoint)
|
||||
{
|
||||
return info.YRatio;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (info.Orientation)
|
||||
{
|
||||
case ConnectorOrientation.Top:
|
||||
return 0;
|
||||
case ConnectorOrientation.Left:
|
||||
return 0.5;
|
||||
case ConnectorOrientation.Bottom:
|
||||
return 1;
|
||||
case ConnectorOrientation.Right:
|
||||
return 0.5;
|
||||
default: return info.YRatio;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private DesignerItemViewModelBase GetConnectorDataItem(IDiagramViewModel diagramViewModel, Guid conectorDataItemId, Type connectorDataItemType)
|
||||
{
|
||||
@@ -659,106 +427,6 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
return false;
|
||||
}
|
||||
|
||||
#region 布局
|
||||
public void AlignTopExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.AlignTopCommand.Execute(null);
|
||||
}
|
||||
public void AlignVerticalCentersExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.AlignVerticalCentersCommand.Execute(null);
|
||||
}
|
||||
public void AlignBottomExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.AlignBottomCommand.Execute(null);
|
||||
}
|
||||
public void AlignLeftExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.AlignLeftCommand.Execute(null);
|
||||
}
|
||||
public void AlignHorizontalCentersExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.AlignHorizontalCentersCommand.Execute(null);
|
||||
}
|
||||
public void AlignRightExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.AlignRightCommand.Execute(null);
|
||||
}
|
||||
public void BringForwardExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.BringForwardCommand.Execute(null);
|
||||
}
|
||||
public void BringToFrontExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.BringToFrontCommand.Execute(null);
|
||||
}
|
||||
public void SendBackwardExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.SendBackwardCommand.Execute(null);
|
||||
}
|
||||
public void SendToBackExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.SendToBackCommand.Execute(null);
|
||||
}
|
||||
public void DistributeHorizontalExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.DistributeHorizontalCommand.Execute(null);
|
||||
}
|
||||
public void DistributeVerticalExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.DistributeVerticalCommand.Execute(null);
|
||||
}
|
||||
public void SelectAllExecuted(object para)
|
||||
{
|
||||
DiagramViewModel.SelectAllCommand.Execute(null);
|
||||
}
|
||||
public void GroupExecuted(object para)
|
||||
{
|
||||
var items = from item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>()
|
||||
where item.ParentId == Guid.Empty
|
||||
select item;
|
||||
|
||||
Rect rect = DiagramViewModel.GetBoundingRectangle(items);
|
||||
|
||||
GroupDesignerItemViewModel groupItem = new GroupDesignerItemViewModel();
|
||||
groupItem.IsGroup = true;
|
||||
groupItem.ItemWidth = rect.Width;
|
||||
groupItem.ItemHeight = rect.Height;
|
||||
groupItem.Left = rect.Left;
|
||||
groupItem.Top = rect.Top;
|
||||
groupItem.ZIndex = DiagramViewModel.Items.Count;
|
||||
|
||||
DiagramViewModel.DirectAddItemCommand.Execute(groupItem);
|
||||
|
||||
foreach (DesignerItemViewModelBase item in items)
|
||||
item.ParentId = groupItem.Id;
|
||||
|
||||
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
|
||||
//groupItem.IsSelected = true;
|
||||
DiagramViewModel.SelectionService.AddToSelection(groupItem);
|
||||
}
|
||||
|
||||
public void UngroupExecuted(object para)
|
||||
{
|
||||
var groups = (from item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>()
|
||||
where item.IsGroup && item.ParentId == Guid.Empty
|
||||
select item).ToArray();
|
||||
|
||||
foreach (DesignerItemViewModelBase groupRoot in groups)
|
||||
{
|
||||
var children = from child in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>()
|
||||
where child.ParentId == groupRoot.Id
|
||||
select child;
|
||||
|
||||
foreach (DesignerItemViewModelBase child in children)
|
||||
child.ParentId = Guid.Empty;
|
||||
|
||||
DiagramViewModel.RemoveItemCommand.Execute(groupRoot);
|
||||
DiagramViewModel.UpdateZIndex();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 主题
|
||||
public void SetPropertyValue(SelectableDesignerItemViewModelBase selectable, string propertyName)
|
||||
{
|
||||
@@ -806,93 +474,7 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
}
|
||||
quickThemeViewModel.QuickTheme = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void CenterMoveExecuted(object para)
|
||||
{
|
||||
foreach (var item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Left = (DiagramViewModel.PageSize.Width - item.ItemWidth) / 2;
|
||||
item.Top = (DiagramViewModel.PageSize.Height - item.ItemHeight) / 2;
|
||||
}
|
||||
}
|
||||
|
||||
public void LeftMoveExecuted(object para)
|
||||
{
|
||||
foreach (var item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Left -= 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
public void RightMoveExecuted(object para)
|
||||
{
|
||||
foreach (var item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Left += 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
public void UpMoveExecuted(object para)
|
||||
{
|
||||
foreach (var item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Top -= 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
public void DownMoveExecuted(object para)
|
||||
{
|
||||
foreach (var item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Top += 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
public void SameWidthExecuted(object para)
|
||||
{
|
||||
if (para is DesignerItemViewModelBase designerItem)
|
||||
{
|
||||
foreach (var item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.ItemWidth = designerItem.ItemWidth;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SameHeightExecuted(object para)
|
||||
{
|
||||
if (para is DesignerItemViewModelBase designerItem)
|
||||
{
|
||||
foreach (var item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.ItemHeight = designerItem.ItemHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SameAngleExecuted(object para)
|
||||
{
|
||||
if (para is DesignerItemViewModelBase designerItem)
|
||||
{
|
||||
foreach (var item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Angle = designerItem.Angle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SameSizeExecuted(object para)
|
||||
{
|
||||
if (para is DesignerItemViewModelBase designerItem)
|
||||
{
|
||||
foreach (var item in DiagramViewModel.SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.ItemWidth = designerItem.ItemWidth;
|
||||
item.ItemHeight = designerItem.ItemHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void LockAction(LockObject lockObject, string propertyName)
|
||||
{
|
||||
@@ -946,15 +528,15 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
ConnectionItem connection = new ConnectionItem(
|
||||
connectionVM.SourceConnectorInfo.DataItem.Id,
|
||||
connectionVM.SourceConnectorInfo.Orientation,
|
||||
DiagramItem.GetTypeOfDiagramItem(connectionVM.SourceConnectorInfo.DataItem),
|
||||
GetXRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
GetYRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
connectionVM.SourceConnectorInfo.DataItem.GetType(),
|
||||
connectionVM.GetXRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
connectionVM.GetYRatioFromConnector(connectionVM.SourceConnectorInfo),
|
||||
connectionVM.SourceConnectorInfo.IsInnerPoint,
|
||||
sinkConnector.DataItem.Id,
|
||||
sinkConnector.Orientation,
|
||||
DiagramItem.GetTypeOfDiagramItem(sinkConnector.DataItem),
|
||||
GetXRatioFromConnector(sinkConnector),
|
||||
GetYRatioFromConnector(sinkConnector),
|
||||
sinkConnector.DataItem.GetType(),
|
||||
connectionVM.GetXRatioFromConnector(sinkConnector),
|
||||
connectionVM.GetYRatioFromConnector(sinkConnector),
|
||||
sinkConnector.IsInnerPoint,
|
||||
connectionVM);
|
||||
|
||||
@@ -1039,7 +621,6 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void AddImageExecuted(object para)
|
||||
{
|
||||
ImageItemViewModel itemBase = new ImageItemViewModel();
|
||||
@@ -1107,7 +688,6 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
private Size MeasureString(OutLineTextDesignerItemViewModel itemBase)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user