From 8d1cacaa3e8a81ff4ca1a28c545ee3a541c2d8fc Mon Sep 17 00:00:00 2001 From: root Date: Fri, 7 Nov 2025 10:57:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=96=E4=BE=A7=E5=9C=86=E4=BF=AE=E5=A4=8Dbu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Converters/NodeCanvasConverters.cs | 23 +++++++++++------ .../Views/Pages/NodeCanvasPageView.axaml | 13 +++++++--- modify.md | 25 +++++++++++++++++++ 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/AuroraDesk.Presentation/Converters/NodeCanvasConverters.cs b/AuroraDesk.Presentation/Converters/NodeCanvasConverters.cs index 0abba63..7069866 100644 --- a/AuroraDesk.Presentation/Converters/NodeCanvasConverters.cs +++ b/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); diff --git a/AuroraDesk.Presentation/Views/Pages/NodeCanvasPageView.axaml b/AuroraDesk.Presentation/Views/Pages/NodeCanvasPageView.axaml index cc0265e..1b08553 100644 --- a/AuroraDesk.Presentation/Views/Pages/NodeCanvasPageView.axaml +++ b/AuroraDesk.Presentation/Views/Pages/NodeCanvasPageView.axaml @@ -346,17 +346,20 @@ + VerticalAlignment="Center" + ClipToBounds="False"> + Side="Left" + ClipToBounds="False"/> @@ -400,11 +403,13 @@ Height="{Binding Height}" ItemsSource="{Binding ConnectionPoints, Converter={StaticResource ConnectionPointsToOutputsConverter}}" HorizontalAlignment="Right" - VerticalAlignment="Center"> + VerticalAlignment="Center" + ClipToBounds="False"> + Side="Right" + ClipToBounds="False"/> diff --git a/modify.md b/modify.md index 3f01e1c..7fa941c 100644 --- a/modify.md +++ b/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" 禁用容器裁剪 +- **效果**: + - ✅ 左侧外侧圆正确显示在组件左边线的左侧,完全可见不被裁剪 + - ✅ 右侧外侧圆正确显示在组件右边线的右侧,完全可见不被裁剪 + - ✅ 内侧模式保持圆在组件边界内部 + - ✅ 代码逻辑更加清晰易懂