mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
73 lines
2.5 KiB
C#
73 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Specialized;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Shapes;
|
|
|
|
namespace Util.DiagramDesigner
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for ConnectorContainer.xaml
|
|
/// </summary>
|
|
public partial class ConnectorContainer : ItemsControl
|
|
{
|
|
private Canvas rootCanvas;
|
|
public ConnectorContainer()
|
|
{
|
|
InitializeComponent();
|
|
((INotifyCollectionChanged)Items).CollectionChanged += ConnectorContainer_CollectionChanged;
|
|
}
|
|
|
|
void ConnectorContainer_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
|
{
|
|
if (e.Action == NotifyCollectionChangedAction.Add)
|
|
{
|
|
foreach(var item in e.NewItems)
|
|
{
|
|
FullyCreatedConnectorInfo vm = item as FullyCreatedConnectorInfo;
|
|
var connector = ItemContainerGenerator.ContainerFromItem(item) as ContentPresenter;
|
|
|
|
Canvas.SetLeft(connector, vm.DataItem.ItemWidth * vm.XRatio - vm.ConnectorWidth / 2);
|
|
Canvas.SetTop(connector, vm.DataItem.ItemHeight * vm.YRatio - vm.ConnectorHeight / 2);
|
|
}
|
|
//SetConnectorLocation();
|
|
}
|
|
}
|
|
|
|
void ConnectorContainer_SizeChanged(object sender, SizeChangedEventArgs e)
|
|
{
|
|
SetConnectorLocation();
|
|
}
|
|
|
|
private void rootCanvas_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
rootCanvas = sender as Canvas;
|
|
SetConnectorLocation();
|
|
SizeChanged += ConnectorContainer_SizeChanged;
|
|
}
|
|
|
|
private void SetConnectorLocation()
|
|
{
|
|
foreach (var connector in rootCanvas.Children.OfType<ContentPresenter>())
|
|
{
|
|
var vm = connector.DataContext as FullyCreatedConnectorInfo;
|
|
if (vm != null)
|
|
{
|
|
Canvas.SetLeft(connector, vm.DataItem.ItemWidth * vm.XRatio - vm.ConnectorWidth / 2);
|
|
Canvas.SetTop(connector, vm.DataItem.ItemHeight * vm.YRatio - vm.ConnectorHeight / 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|