是否更改路径标记语法的"数据"属性的内容


<Path x:Name="Part" Fill="Red" Data="M0,0 L0,-100 A100,100 0 0 1 100,0 z" Margin="261,197,-261,-197" />

如何访问C#代码中的所有数据?我可以更改颜色等,但无法访问m、LA等

SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 255, 255, 255);
Part.Fill = mySolidColorBrush;

从XAML解析时,Data属性包含一个不可变的StreamGeometry

定义一个几何形状,使用StreamGeometryContext进行描述。此几何体是PathGeometry的轻量级替代方案:它不支持数据绑定、动画或修改。

但是,您可以创建当前数据的PathGeometry副本,对其进行修改并将其传递回Data属性。

在下面的代码中,只有当Data尚未包含可修改的PathGeometry时,才会创建副本,因此当您多次调用它时,只会创建一个副本。

if (!(Part.Data is PathGeometry path) || path.IsFrozen)
{
path = PathGeometry.CreateFromGeometry(Part.Data);
}
foreach (var figure in path.Figures)
{
foreach (var segment in figure.Segments)
{
if (segment is ArcSegment arc)
{
arc.Point = new Point(0, 100);
}
//else if ...
}
}
Part.Data = path;

有关所有不同线段类型的详细信息,请参见路径几何图形。

当@Clemens和@aybe在从字符串解析几何体时正确写入时,会创建一个StreamGeometry实例
但是您可以设置自己的几何体而不是字符串,然后您就可以访问它的每个元素
这些片段中的任何一个都可以更改、设置动画、删除或添加。

<UniformGrid Columns="1">
<Path x:Name="Part" Fill="Red" Data="M0,0 L0, -100 A100,100 0 0 1 100,0 z" VerticalAlignment="Center" HorizontalAlignment="Center" />
<Path x:Name="PathFullSintacsis" Fill="Red" VerticalAlignment="Center" HorizontalAlignment="Center">
<Path.Data>
<PathGeometry x:Name="PartFullGeometry">
<PathFigure x:Name="PartFullFigure" StartPoint="0 0" IsClosed="True">
<LineSegment x:Name="PartFullLine"  Point="0 -100"/>
<ArcSegment x:Name="PartFullArc" Point="100 0" RotationAngle="90" Size="100 100" SweepDirection="Clockwise"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</UniformGrid>

最新更新