我正在尝试使用数据绑定在WPF中制作动画。我正在使用MatrixAnimationUsingPath让形状遵循路径。路径在我的viewModel中表示为数组;点[]。如何在我的viwmodel中绑定我的point属性,以便我可以将它与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
}
答案 0 :(得分:0)
你差不多......你需要一个返回PathFigure
而不是积分的转换器。
如果您修改转换器,则代码应该有效。
希望它有所帮助。
答案 1 :(得分:0)
未经测试:您应该能够重用Path.Data绑定表达式,如下所示:
<MatrixAnimationUsingPath ...
PathGeometry="{Binding Path=Points,
Converter={StaticResource ResourceKey=PointsToPathConverter}}" />
我不确定你是否需要显式设置绑定源对象,如 MatrixAnimationUsingPath对象没有DataContext。