Browse Source

外侧圆修复bug

refactor/namespace-and-layering
root 1 month ago
parent
commit
8d1cacaa3e
  1. 23
      AuroraDesk.Presentation/Converters/NodeCanvasConverters.cs
  2. 13
      AuroraDesk.Presentation/Views/Pages/NodeCanvasPageView.axaml
  3. 25
      modify.md

23
AuroraDesk.Presentation/Converters/NodeCanvasConverters.cs

@ -248,14 +248,23 @@ public class ConnectorPlacementMarginConverter : IMultiValueConverter
if (values[0] is ConnectorPlacementMode placement && values[1] is double size)
{
var side = parameter?.ToString() ?? string.Empty;
var offset = placement == ConnectorPlacementMode.Outside ? size / 2 : 0;
return side switch
// Outside 模式:圆在组件边界外侧
// Inside 模式:圆在组件边界内侧
if (placement == ConnectorPlacementMode.Outside)
{
"Left" => new Thickness(-offset, 0, 0, 0),
"Right" => new Thickness(0, 0, -offset, 0),
_ => new Thickness(0)
};
return side switch
{
"Left" => new Thickness(-size, 0, 0, 0), // 左侧外侧:向左移动 size
"Right" => new Thickness(0, 0, -size, 0), // 右侧外侧:使用负右边距
_ => new Thickness(0)
};
}
else
{
// Inside 模式:不添加额外边距
return new Thickness(0);
}
}
return new Thickness(0);

13
AuroraDesk.Presentation/Views/Pages/NodeCanvasPageView.axaml

@ -346,17 +346,20 @@
<Grid ColumnDefinitions="Auto,*,Auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ClipToBounds="False"
Margin="0">
<!-- 左侧连接点 -->
<ItemsControl Grid.Column="0"
Height="{Binding Height}"
ItemsSource="{Binding ConnectionPoints, Converter={StaticResource ConnectionPointsToInputsConverter}}"
HorizontalAlignment="Left"
VerticalAlignment="Center">
VerticalAlignment="Center"
ClipToBounds="False">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<controls:ConnectorColumnPanel VerticalAlignment="Stretch"
Side="Left"/>
Side="Left"
ClipToBounds="False"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
@ -400,11 +403,13 @@
Height="{Binding Height}"
ItemsSource="{Binding ConnectionPoints, Converter={StaticResource ConnectionPointsToOutputsConverter}}"
HorizontalAlignment="Right"
VerticalAlignment="Center">
VerticalAlignment="Center"
ClipToBounds="False">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<controls:ConnectorColumnPanel VerticalAlignment="Stretch"
Side="Right"/>
Side="Right"
ClipToBounds="False"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>

25
modify.md

@ -623,3 +623,28 @@
- 发送测试消息,验证双向通信
- 测试多客户端连接场景
- 测试异常情况(端口占用、网络错误等)
### 修正节点附件圆外侧定位,确保左侧圆在边线左侧
- **日期**: 2025年11月7日
- **问题**: 左侧附件圆设置为 Outside 模式时,圆没有正确显示在组件左边线的左侧,而是显示在右侧;修正后圆圈像是被容器裁剪遮挡
- **修复内容**:
1. **转换器逻辑重构**
- 重构 `ConnectorPlacementMarginConverter` 转换器逻辑,明确区分 Inside 和 Outside 模式
- Outside 模式:
- 左侧圆使用负的左边距(`Thickness(-size, 0, 0, 0)`),向左偏移一个直径的距离
- 右侧圆使用负的右边距(`Thickness(0, 0, -size, 0)`),向右偏移一个直径的距离
- Inside 模式:不添加额外边距(`Thickness(0)`)
- 添加详细的代码注释,说明 Outside 和 Inside 模式的含义
2. **禁用容器裁剪**
- 为节点内部的 `Grid` 容器添加 `ClipToBounds="False"`,确保外侧圆不被裁剪
- 为左右两侧的 `ItemsControl` 添加 `ClipToBounds="False"`
- 为左右两侧的 `ConnectorColumnPanel` 添加 `ClipToBounds="False"`
- 确保圆圈完全显示在节点外侧,不会被任何容器裁剪
- **涉及文件**:
- `AuroraDesk.Presentation/Converters/NodeCanvasConverters.cs` - 修正 ConnectorPlacementMarginConverter 逻辑
- `AuroraDesk.Presentation/Views/Pages/NodeCanvasPageView.axaml` - 添加 ClipToBounds="False" 禁用容器裁剪
- **效果**:
- ✅ 左侧外侧圆正确显示在组件左边线的左侧,完全可见不被裁剪
- ✅ 右侧外侧圆正确显示在组件右边线的右侧,完全可见不被裁剪
- ✅ 内侧模式保持圆在组件边界内部
- ✅ 代码逻辑更加清晰易懂

Loading…
Cancel
Save