可以自定义连接点

This commit is contained in:
艾竹
2023-01-29 22:54:06 +08:00
parent ba9e3bdf58
commit 5ee0c1ce26
15 changed files with 548 additions and 125 deletions

View File

@@ -24,6 +24,7 @@
<s:ClipConverter x:Key="ClipConverter"/>
<s:InvertBoolConverter x:Key="InvertBoolConverter"/>
<s:ConectorStyleConverter x:Key="ConectorStyleConverter"/>
<s:NotNullOrEmptyToBoolConverter x:Key="NotNullOrEmptyToBoolConverter"/>
<!-- ResizeDecorator Default Template -->
<!--
@@ -178,7 +179,7 @@
</ContextMenu.ItemContainerStyle>
</ContextMenu>
</Grid.ContextMenu>
<!-- transparent extra space makes connector easier to hit -->
transparent extra space makes connector easier to hit
<Rectangle Fill="Transparent" Margin="-2" />
<Rectangle Fill="{Binding ColorViewModel.FillColor,Converter={StaticResource ColorBrushConverter}}" StrokeThickness="1" Stroke="{Binding ColorViewModel.LineColor,Converter={StaticResource ColorBrushConverter}}" />
</Grid>
@@ -311,46 +312,70 @@
<ControlTemplate x:Key="ConnectorDecoratorTemplate"
TargetType="{x:Type Control}">
<Grid Margin="-5">
<s:Connector DataContext="{Binding LeftConnector}" Style="{Binding Style, Converter={StaticResource ConectorStyleConverter},ConverterParameter={StaticResource DefaultConnectorStyle}}"
Orientation="Left"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector DataContext="{Binding TopLeftConnector}" Style="{Binding Style, Converter={StaticResource ConectorStyleConverter},ConverterParameter={StaticResource DefaultConnectorStyle}}"
Orientation="TopLeft"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector DataContext="{Binding TopConnector}" Style="{Binding Style, Converter={StaticResource ConectorStyleConverter},ConverterParameter={StaticResource DefaultConnectorStyle}}"
Orientation="Top"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector DataContext="{Binding TopRightConnector}" Style="{Binding Style, Converter={StaticResource ConectorStyleConverter},ConverterParameter={StaticResource DefaultConnectorStyle}}"
Orientation="TopRight"
VerticalAlignment="Top"
HorizontalAlignment="Right"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector DataContext="{Binding RightConnector}" Style="{Binding Style, Converter={StaticResource ConectorStyleConverter},ConverterParameter={StaticResource DefaultConnectorStyle}}"
Orientation="Right"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector DataContext="{Binding BottomRightConnector}" Style="{Binding Style, Converter={StaticResource ConectorStyleConverter},ConverterParameter={StaticResource DefaultConnectorStyle}}"
Orientation="BottomRight"
VerticalAlignment="Bottom"
HorizontalAlignment="Right"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector DataContext="{Binding BottomConnector}" Style="{Binding Style, Converter={StaticResource ConectorStyleConverter},ConverterParameter={StaticResource DefaultConnectorStyle}}"
Orientation="Bottom"
VerticalAlignment="Bottom"
HorizontalAlignment="Center"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector DataContext="{Binding BottomLeftConnector}" Style="{Binding Style, Converter={StaticResource ConectorStyleConverter},ConverterParameter={StaticResource DefaultConnectorStyle}}"
Orientation="BottomLeft"
VerticalAlignment="Bottom"
HorizontalAlignment="Left"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector
Content="{Binding LeftConnector}"
Cursor="Cross"
SnapsToDevicePixels="True"
Orientation="Left"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector
Content="{Binding TopLeftConnector}"
Cursor="Cross"
SnapsToDevicePixels="True"
Orientation="TopLeft"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector
Content="{Binding TopConnector}"
Cursor="Cross"
SnapsToDevicePixels="True"
Orientation="Top"
VerticalAlignment="Top"
HorizontalAlignment="Center"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector
Content="{Binding TopRightConnector}"
Cursor="Cross"
SnapsToDevicePixels="True"
Orientation="TopRight"
VerticalAlignment="Top"
HorizontalAlignment="Right"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector
Content="{Binding RightConnector}"
Cursor="Cross"
SnapsToDevicePixels="True"
Orientation="Right"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector
Content="{Binding BottomRightConnector}"
Cursor="Cross"
SnapsToDevicePixels="True"
Orientation="BottomRight"
VerticalAlignment="Bottom"
HorizontalAlignment="Right"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector
Content="{Binding BottomConnector}"
Cursor="Cross"
SnapsToDevicePixels="True"
Orientation="Bottom"
VerticalAlignment="Bottom"
HorizontalAlignment="Center"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
<s:Connector
Content="{Binding BottomLeftConnector}"
Cursor="Cross"
SnapsToDevicePixels="True"
Orientation="BottomLeft"
VerticalAlignment="Bottom"
HorizontalAlignment="Left"
Visibility="{Binding Path=ShowConnectors, Converter={x:Static s:BoolToVisibilityConverter.Instance}}" />
</Grid>
</ControlTemplate>
@@ -363,7 +388,7 @@
<s:Connector Style="{StaticResource DefaultConnectorStyle}"/>
</Grid>
</DataTemplate>
</s:ConnectorContainer.ItemTemplate>
</s:ConnectorContainer.ItemTemplate>
</s:ConnectorContainer>
</ControlTemplate>
@@ -378,7 +403,7 @@
<ItemsControl ItemsSource="{Binding Items}"
ItemContainerStyleSelector="{x:Static s:DesignerItemsControlItemStyleSelector.Instance}">
<ItemsControl.Resources>
<!--基础类型-->
<Style x:Key="designerItemStyle"
TargetType="{x:Type ContentPresenter}">
@@ -459,7 +484,15 @@
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Text,Converter={StaticResource NotNullOrEmptyToBoolConverter}}" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<s:TextControl x:Name="PART_Text" />
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Control.Style>
@@ -538,7 +571,7 @@
<Grid.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding EditCommand}" CommandParameter="{Binding }" />
</Grid.InputBindings>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="删除" Command="{Binding DeleteConnectionCommand}" CommandParameter="{Binding}"/>
@@ -547,14 +580,14 @@
</ContextMenu>
</Grid.ContextMenu>
<s:LineControl x:Name="line"/>
<s:LineControl x:Name="line"/>
<!-- PART_DragThumb -->
<c:DragThumb x:Name="PART_DragThumb" Margin="8"
Cursor="SizeAll" >
<c:DragThumb.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding EditCommand}" CommandParameter="{Binding }" />
</c:DragThumb.InputBindings>
</c:DragThumb.InputBindings>
</c:DragThumb>
<s:PointContainer x:Name="PART_VerticesContainer" Style="{StaticResource innerConnectorContainer}" ItemsSource="{Binding Vertices}" Visibility="Collapsed">
@@ -583,13 +616,20 @@
<s:PointContainer.ItemTemplate>
<DataTemplate>
<Grid s:SelectionProps.EnabledForSelection="True" Background="{Binding ColorViewModel.FillColor,Converter={StaticResource ColorBrushConverter}}">
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="删除" Command="{Binding DeleteLabelCommand}" CommandParameter="{Binding}"/>
</ContextMenu>
</Grid.ContextMenu>
<c:PointDragThumb Cursor="SizeAll" Opacity="0"/>
<c:PointDragThumb Cursor="SizeAll" Opacity="0">
<c:PointDragThumb.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding EditCommand}" CommandParameter="{Binding }" />
</c:PointDragThumb.InputBindings>
</c:PointDragThumb>
<s:TextControl Margin="5" />
</Grid>
</DataTemplate>
</s:PointContainer.ItemTemplate>
@@ -828,7 +868,7 @@
</Setter.Value>
</Setter>
</Style>
<Style x:Key="linkpointItemStyle"
TargetType="{x:Type ContentPresenter}">
<Setter Property="Canvas.Top"