gpt4 book ai didi

c# - 如何将 Point[] 转换为 PathGeometry?

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:30 43 4
gpt4 key购买 nike

我正在尝试使用数据绑定(bind)在 WPF 中制作动画。我正在使用 MatrixAnimationUsingPath 让形状跟随路径。路径在我的 viewModel 中表示为数组;观点[]。我如何在我的 viwmodel 中绑定(bind)我的点属性,以便我可以将它与 MatrixAnimationUsingPath 一起使用。

<Storyboard>
<MatrixAnimationUsingPath Storyboard.TargetName="MyMatrixTransform"
Storyboard.TargetProperty="Matrix" DoesRotateWithTangent="True"
Duration="0:0:5" RepeatBehavior="Forever">
<MatrixAnimationUsingPath.PathGeometry>
<PathGeometry>
// WHAT TO PUT HERE!
</PathGeometry>
</MatrixAnimationUsingPath.PathGeometry>
</MatrixAnimationUsingPath>
</Storyboard>

我已经能够使用值转换器从点创建路径,但我无法使用 MatrixAnimationUsingPath 中的路径。

<Path Name="MyPath" StrokeThickness="2" Data="{Binding Path=Points, Converter={StaticResource ResourceKey=PointsToPathConverter}}">

评论后添加:

我以前对值转换器没有那么感兴趣。我使用的转换器,我确实在网上找到了。我可以修改吗?

[ValueConversion(typeof(Point[]), typeof(Geometry))]
public class PointsToPathConverter : IValueConverter
{
#region IValueConverter Members

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Point[] points = (Point[])value;
if (points.Length > 0)
{
Point start = points[0];
List<LineSegment> segments = new List<LineSegment>();
for (int i = 1; i < points.Length; i++)
{
segments.Add(new LineSegment(points[i], true));
}
PathFigure figure = new PathFigure(start, segments, false); //true if closed
PathGeometry geometry = new PathGeometry();
geometry.Figures.Add(figure);
return geometry;
}
else
{
return null;
}
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}

#endregion
}

最佳答案

您快完成了……您需要一个返回 PathFigure 而不是点的转换器。

如果您修改转换器,代码应该可以工作。

希望对您有所帮助。

关于c# - 如何将 Point[] 转换为 PathGeometry?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19680947/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com