mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-05-03 22:41:30 +08:00
mind 进行中
This commit is contained in:
@@ -38,12 +38,31 @@ namespace AIStudio.Wpf.Flowchart
|
|||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
|
|
||||||
DesignerItemViewModelBase start = new MindLevel1Node() { Left = 100, Top = 0, ItemWidth = 80, ItemHeight = 40, Text = "思维导图" };
|
MindLevel1Node level1node = new MindLevel1Node() { Text = "思维导图" };
|
||||||
DiagramViewModel.DirectAddItemCommand.Execute(start);
|
DiagramViewModel.DirectAddItemCommand.Execute(level1node);
|
||||||
DiagramViewModel?.CenterMoveCommand.Execute(start);
|
DiagramViewModel.CenterMoveCommand.Execute(level1node);
|
||||||
|
|
||||||
|
MindLevel2Node level2node1_1 = new MindLevel2Node() { Text = "分支主题1" };
|
||||||
|
DiagramViewModel.DirectAddItemCommand.Execute(level2node1_1);
|
||||||
|
level1node.Children.Add(level2node1_1);
|
||||||
|
|
||||||
|
MindLevel3Node level3node1_1_1 = new MindLevel3Node() { Text = "分支主题1_1" };
|
||||||
|
DiagramViewModel.DirectAddItemCommand.Execute(level3node1_1_1);
|
||||||
|
level2node1_1.Children.Add(level3node1_1_1);
|
||||||
|
|
||||||
|
MindLevel3Node level3node1_1_2 = new MindLevel3Node() { Text = "分支主题1_2" };
|
||||||
|
DiagramViewModel.DirectAddItemCommand.Execute(level3node1_1_2);
|
||||||
|
level2node1_1.Children.Add(level3node1_1_2);
|
||||||
|
|
||||||
|
MindLevel2Node level2node1_2 = new MindLevel2Node() { Text = "分支主题2" };
|
||||||
|
DiagramViewModel.DirectAddItemCommand.Execute(level2node1_2);
|
||||||
|
level1node.Children.Add(level2node1_2);
|
||||||
|
|
||||||
|
|
||||||
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
|
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
|
||||||
|
|
||||||
|
level1node.LayoutUpdated();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
|
|||||||
@@ -1898,14 +1898,14 @@
|
|||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
<dd:ZoomBox x:Name="zoomBox"
|
<dd:ZoomBox x:Name="zoomBox"
|
||||||
Width="180"
|
Width="180"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Left"
|
||||||
VerticalAlignment="Bottom"
|
VerticalAlignment="Bottom"
|
||||||
OffSet="True"
|
OffSet="True"
|
||||||
DesignerCanvas="{Binding ElementName=diagram}"
|
DesignerCanvas="{Binding ElementName=diagram}"
|
||||||
MaximumZoomValue="{Binding MaximumZoomValue,Mode=TwoWay}"
|
MaximumZoomValue="{Binding MaximumZoomValue,Mode=TwoWay}"
|
||||||
MinimumZoomValue="{Binding MinimumZoomValue,Mode=TwoWay}"
|
MinimumZoomValue="{Binding MinimumZoomValue,Mode=TwoWay}"
|
||||||
ZoomValue="{Binding ZoomValue,Mode=TwoWay}"
|
ZoomValue="{Binding ZoomValue,Mode=TwoWay}"
|
||||||
Margin="0,0,5,5" />
|
Margin="20,0,0,20" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</TabControl.ContentTemplate>
|
</TabControl.ContentTemplate>
|
||||||
|
|||||||
@@ -29,11 +29,14 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels
|
|||||||
node2.ClearConnectors();
|
node2.ClearConnectors();
|
||||||
var port2_1 = new FullyCreatedConnectorInfo(DiagramViewModel, node2, ConnectorOrientation.Top, true) { XRatio = 0.2, YRatio = 0.8 };
|
var port2_1 = new FullyCreatedConnectorInfo(DiagramViewModel, node2, ConnectorOrientation.Top, true) { XRatio = 0.2, YRatio = 0.8 };
|
||||||
var port2_2 = new FullyCreatedConnectorInfo(DiagramViewModel, node2, ConnectorOrientation.Top, true) { XRatio = 0.8, YRatio = 0.2 };
|
var port2_2 = new FullyCreatedConnectorInfo(DiagramViewModel, node2, ConnectorOrientation.Top, true) { XRatio = 0.8, YRatio = 0.2 };
|
||||||
|
node2.AddConnector(port2_1);
|
||||||
|
node2.AddConnector(port2_2);
|
||||||
DiagramViewModel.DirectAddItemCommand.Execute(node2);
|
DiagramViewModel.DirectAddItemCommand.Execute(node2);
|
||||||
|
|
||||||
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
|
DefaultDesignerItemViewModel node3 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 300, Top = 50, Text = "3" };
|
||||||
node3.ClearConnectors();
|
node3.ClearConnectors();
|
||||||
var port3 = new FullyCreatedConnectorInfo(DiagramViewModel, node3, ConnectorOrientation.Bottom, true) { XRatio = 0.5, YRatio = 0.5 };
|
var port3 = new FullyCreatedConnectorInfo(DiagramViewModel, node3, ConnectorOrientation.Bottom, true) { XRatio = 0.5, YRatio = 0.5 };
|
||||||
|
node3.AddConnector(port3);
|
||||||
DiagramViewModel.DirectAddItemCommand.Execute(node3);
|
DiagramViewModel.DirectAddItemCommand.Execute(node3);
|
||||||
|
|
||||||
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, port1, port2_1, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
ConnectionViewModel connector1 = new ConnectionViewModel(DiagramViewModel, port1, port2_1, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
|
||||||
|
|||||||
@@ -425,8 +425,7 @@
|
|||||||
Binding="{Binding Connectors.Count}">
|
Binding="{Binding Connectors.Count}">
|
||||||
<Setter TargetName="PART_ConnectorDecorator" Property="Visibility" Value="Collapsed" />
|
<Setter TargetName="PART_ConnectorDecorator" Property="Visibility" Value="Collapsed" />
|
||||||
</DataTrigger>
|
</DataTrigger>
|
||||||
<DataTrigger Value="True"
|
<DataTrigger Value="True" Binding="{Binding IsInnerConnector}">
|
||||||
Binding="{Binding IsInnerConnector}">
|
|
||||||
<Setter TargetName="PART_ConnectorDecorator" Property="Template" Value="{StaticResource InnerConnectorDecoratorTemplate}" />
|
<Setter TargetName="PART_ConnectorDecorator" Property="Template" Value="{StaticResource InnerConnectorDecoratorTemplate}" />
|
||||||
</DataTrigger>
|
</DataTrigger>
|
||||||
</DataTemplate.Triggers>
|
</DataTemplate.Triggers>
|
||||||
|
|||||||
@@ -6,6 +6,19 @@
|
|||||||
<dd:ColorBrushConverter x:Key="ColorBrushConverter"/>
|
<dd:ColorBrushConverter x:Key="ColorBrushConverter"/>
|
||||||
<dd:DoubleToCornerRadius x:Key="DoubleToCornerRadius"/>
|
<dd:DoubleToCornerRadius x:Key="DoubleToCornerRadius"/>
|
||||||
|
|
||||||
|
<DataTemplate DataType="{x:Type viewmodel:MindNode}">
|
||||||
|
<Grid IsHitTestVisible="False">
|
||||||
|
<Grid>
|
||||||
|
<Border BorderThickness="1"
|
||||||
|
BorderBrush="{Binding ColorViewModel.LineColor,Converter={StaticResource ColorBrushConverter}}"
|
||||||
|
Background="{Binding ColorViewModel.FillColor,Converter={StaticResource ColorBrushConverter}}"
|
||||||
|
CornerRadius="{Binding CornerRadius,Converter={StaticResource DoubleToCornerRadius}}">
|
||||||
|
|
||||||
|
</Border>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
</DataTemplate>
|
||||||
<DataTemplate DataType="{x:Type viewmodel:MindLevel1Node}">
|
<DataTemplate DataType="{x:Type viewmodel:MindLevel1Node}">
|
||||||
<Grid IsHitTestVisible="False">
|
<Grid IsHitTestVisible="False">
|
||||||
<Grid>
|
<Grid>
|
||||||
|
|||||||
@@ -51,16 +51,50 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
public double Spacing
|
public double Spacing
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
} = 20;
|
||||||
|
|
||||||
public List<MindNode> Children
|
public List<MindNode> Children
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
|
} = new List<MindNode>();
|
||||||
|
|
||||||
|
public SizeBase SizeWithSpacing
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.Size.Add(Spacing * 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SizeBase GetSize()
|
||||||
|
{
|
||||||
|
var sizewithSpacing = SizeWithSpacing;
|
||||||
|
if (Children?.Count > 0)
|
||||||
|
{
|
||||||
|
var childrensizes = Children.Select(p => p.GetSize());
|
||||||
|
sizewithSpacing = new SizeBase(sizewithSpacing.Width + childrensizes.Max(p => p.Width), Math.Max(sizewithSpacing.Height, childrensizes.Sum(p => p.Height)));
|
||||||
|
}
|
||||||
|
return sizewithSpacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LayoutUpdated()
|
||||||
|
{
|
||||||
|
var totalsize = GetSize();
|
||||||
|
|
||||||
|
double left = MiddlePosition.X + ItemWidth / 2 + Spacing;
|
||||||
|
double top = MiddlePosition.Y - totalsize.Height / 2;
|
||||||
|
if (Children?.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var child in Children)
|
||||||
|
{
|
||||||
|
child.Left = left + Spacing;
|
||||||
|
child.Top = top + Spacing;
|
||||||
|
top += child.SizeWithSpacing.Height;
|
||||||
|
|
||||||
|
child.LayoutUpdated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MindLevel1Node : MindNode
|
public class MindLevel1Node : MindNode
|
||||||
@@ -84,24 +118,23 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
protected override void Init(IDiagramViewModel root)
|
||||||
public void LayoutUpdated()
|
|
||||||
{
|
{
|
||||||
foreach(var child in Children)
|
base.Init(root);
|
||||||
{
|
|
||||||
|
|
||||||
}
|
ItemWidth = 80;
|
||||||
|
ItemHeight = 40;
|
||||||
|
this.ClearConnectors();
|
||||||
|
var port = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 0.5, YRatio = 0.5 };
|
||||||
|
this.AddConnector(port);
|
||||||
|
IsInnerConnector = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RectangleBase Rectangle
|
public RectangleBase Rectangle
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
//public RectangleBase GetChildRectangle()
|
|
||||||
//{
|
|
||||||
// //Children.Select(p => p.Size)
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MindLevel2Node : MindNode
|
public class MindLevel2Node : MindNode
|
||||||
@@ -126,6 +159,20 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void Init(IDiagramViewModel root)
|
||||||
|
{
|
||||||
|
base.Init(root);
|
||||||
|
|
||||||
|
ItemWidth = 80;
|
||||||
|
ItemHeight = 40;
|
||||||
|
this.ClearConnectors();
|
||||||
|
var port1 = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 0, YRatio = 0.5 };
|
||||||
|
this.AddConnector(port1);
|
||||||
|
var port2 = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 1, YRatio = 0.5 };
|
||||||
|
this.AddConnector(port2);
|
||||||
|
IsInnerConnector = true;
|
||||||
|
}
|
||||||
|
|
||||||
public PointBase Offset
|
public PointBase Offset
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
@@ -153,7 +200,19 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
protected override void Init(IDiagramViewModel root)
|
||||||
|
{
|
||||||
|
base.Init(root);
|
||||||
|
|
||||||
|
ItemWidth = 80;
|
||||||
|
ItemHeight = 40;
|
||||||
|
this.ClearConnectors();
|
||||||
|
var port1 = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 0, YRatio = 1 };
|
||||||
|
this.AddConnector(port1);
|
||||||
|
var port2 = new FullyCreatedConnectorInfo(root, this, ConnectorOrientation.None, true) { XRatio = 1, YRatio = 1 };
|
||||||
|
this.AddConnector(port2);
|
||||||
|
IsInnerConnector = true;
|
||||||
|
}
|
||||||
public PointBase Offset
|
public PointBase Offset
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
|
|||||||
Reference in New Issue
Block a user