如何将SVG中的Circle转换为Path?WPF样式转换求助
SVG转WPF Path时Circle元素转换问题
我尝试将以下SVG文件转换为WPF的Path,但不清楚如何处理其中的Circle元素,导致转换后效果与原图不符:原图是带有圆形外框的时钟图标,转换后仅显示内部的刻度和指针,缺失外框。
原始SVG代码
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"> <g fill="none" stroke="#373748" stroke-linecap="round" stroke-linejoin="round" transform="translate(-201 -1495.362)"> <circle style="isolation:auto;mix-blend-mode:normal" cx="217" cy="1511.362" r="15.5" color="#000" overflow="visible"/> <path d="m217.002 1501.846-.002 9.516m7.613 0h-7.598m-.015 13.493v-2m-13.493-11.493h2m11.502-13.487v2m13.487 11.503h-2m-23.174 6.733 1.732-1m3.207-17.432 1 1.732m17.431 3.218-1.732 1m-3.218 17.431-1-1.732m-17.418-16.702 1.732 1m16.7-5.939-1 1.732m5.929 16.705-1.733-1m-16.704 5.929 1-1.732"/> </g> </svg>
我的转换代码(存在问题)
<Style x:Key="ClockIconStyle" TargetType="Path" BasedOn="{StaticResource Base30X30IconStyle}"> <Setter Property="Data" Value="m217.002 1501.846-.002 9.516m7.613 0h-7.598m-.015 13.493v-2m-13.493-11.493h2m11.502-13.487v2m13.487 11.503h-2m-23.174 6.733 1.732-1m3.207-17.432 1 1.732m17.431 3.218-1.732 1m-3.218 17.431-1-1.732m-17.418-16.702 1.732 1m16.7-5.939-1 1.732m5.929 16.705-1.733-1m-16.704 5.929 1-1.732"/> <Setter Property="Stroke" Value="White"/> <Setter Property="EllipseGeometry.Center" Value="217, 1511.362"/> <Setter Property="EllipseGeometry.RadiusX" Value="15.5"/> <Setter Property="EllipseGeometry.RadiusY" Value="15.5"/> </Style>
问题原因
WPF的Path控件无法通过EllipseGeometry的Setter单独添加图形,必须将所有元素统一转换为Path的路径指令,合并到Data属性中。
解决方案
- 将Circle转换为Path路径命令:
SVG中cx="217" cy="1511.362" r="15.5"的圆形,对应Path的弧命令为:
M 217,1495.862 A 15.5,15.5 0 1 0 217,1526.862 A 15.5,15.5 0 1 0 217,1495.862 Z
(通过两段相反的椭圆弧命令绘制完整圆形)
- 合并路径并完善样式:
将圆形命令添加到原有路径的最前端,同时补充SVG原有的描边样式属性,修改后的完整Style如下:
<Style x:Key="ClockIconStyle" TargetType="Path" BasedOn="{StaticResource Base30X30IconStyle}"> <Setter Property="Data" Value="M 217,1495.862 A 15.5,15.5 0 1 0 217,1526.862 A 15.5,15.5 0 1 0 217,1495.862 Z m0 6.484-.002 9.516m7.613 0h-7.598m-.015 13.493v-2m-13.493-11.493h2m11.502-13.487v2m13.487 11.503h-2m-23.174 6.733 1.732-1m3.207-17.432 1 1.732m17.431 3.218-1.732 1m-3.218 17.431-1-1.732m-17.418-16.702 1.732 1m16.7-5.939-1 1.732m5.929 16.705-1.733-1m-16.704 5.929 1-1.732"/> <Setter Property="Stroke" Value="White"/> <Setter Property="Fill" Value="None"/> <Setter Property="StrokeLineCap" Value="Round"/> <Setter Property="StrokeLineJoin" Value="Round"/> </Style>
内容的提问来源于stack exchange,提问作者OrLevi
相关产品推荐
相关产品推荐

