You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改EllipseGeometry的Center后,如何重新渲染Path Shape?

问题:修改EllipseGeometry的Center属性后无视觉效果,如何重新渲染?

用户代码如下:

<Path                  
    Aspect="Fill"
    HorizontalOptions="Center"
    Stroke="Red"
    VerticalOptions="Center">
    <Path.Data>
        <GeometryGroup>
            
            <!-- Other Shapes -->                          

            <EllipseGeometry
                x:Name="circle"
                Center="0,0"
                RadiusX="100"
                RadiusY="100" />

        </GeometryGroup>
    </Path.Data>
</Path>

尝试通过circle.Center = new Point(var1, var2);语句动态移动圆形,但操作没有产生视觉效果,请问每次修改Center属性后,如何重新渲染该形状以在屏幕上呈现更改?


解决方案

1. 使用数据绑定自动触发更新

如果是Xamarin.Forms环境,推荐用绑定属性关联Center值。在ViewModel中定义一个实现INotifyPropertyChanged的Point类型属性,再在XAML中绑定:

<EllipseGeometry
    x:Name="circle"
    Center="{Binding CircleCenter}"
    RadiusX="100"
    RadiusY="100" />

之后只要更新ViewModel中的CircleCenter属性,UI就会自动响应变化,无需手动触发渲染。

2. 手动触发Path的Data属性更新

由于EllipseGeometry的Center属性不支持属性变更通知,修改后UI无法感知。可以通过重新赋值Path.Data强制触发渲染:

// 修改Center后执行以下代码
var geometryGroup = (GeometryGroup)circle.Parent;
path.Data = geometryGroup; // 重新赋值Data属性,触发UI刷新

3. 改用Transform实现移动(更推荐)

相比修改Center,使用TranslateTransform移动图形更高效,且Transform的属性变更会自动触发UI更新:
先修改XAML中的EllipseGeometry:

<EllipseGeometry x:Name="circle" Center="0,0" RadiusX="100" RadiusY="100">
    <EllipseGeometry.Transform>
        <TranslateTransform x:Name="circleTransform" X="0" Y="0"/>
    </EllipseGeometry.Transform>
</EllipseGeometry>

再在代码中直接修改Transform的偏移量:

circleTransform.X = var1;
circleTransform.Y = var2;

这种方式无需额外操作,修改后图形会立即更新。


内容的提问来源于stack exchange,提问作者Costas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:35:21