修改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
相关产品推荐
相关产品推荐

