在我的wpf应用程序中,我想更新画布上的一条线(改变起点和终点坐标)并预览更改,问题是我添加了这条线,但我只能看到初始和最终状态。
有没有办法让线条/画布实时更新自己?我想看看线条是如何改变长度/位置的。
例如,我接收到一个线的开始/结束对的列表,如果我循环该列表并且用来自这些对的值更新线的坐标,我就不能看到中间状态。
我试着将线条和画布的可见性设置为可见,以强制它们更新,但这不起作用。如果我只是添加新线条,我无法看到它们是如何添加的,这只是最后一步。
在下面的代码中,每次我有新的点时,都会从循环中调用DrawLine方法。
有什么建议吗?
public void DrawLine(List<Library2d.Point> points)
{
PathFigure myPathFigure = new PathFigure();
myPathFigure.StartPoint = new System.Windows.Point(points.ElementAt(0).X, points.ElementAt(0).Y);
LineSegment myLineSegment = new LineSegment();
myLineSegment.Point = new System.Windows.Point(points.ElementAt(1).X, points.ElementAt(1).Y);
PathSegmentCollection myPathSegmentCollection = new PathSegmentCollection();
myPathSegmentCollection.Add(myLineSegment);
myPathFigure.Segments = myPathSegmentCollection;
PathFigureCollection myPathFigureCollection = new PathFigureCollection();
myPathFigureCollection.Add(myPathFigure);
PathGeometry myPathGeometry = new PathGeometry();
myPathGeometry.Figures = myPathFigureCollection;
if (myPath == null)
{
myPath = new Path();
myPath.Stroke = Brushes.ForestGreen;
myPath.StrokeThickness = 1;
canvas.Children.Add(myPath);
}
myPath.Data = myPathGeometry;
myPath.Visibility = Visibility.Visible;
myPath.InvalidateMeasure();
canvas.Visibility = Visibility.Visible;
canvas.InvalidateMeasure();
}
1条答案
按热度按时间wz1wpwve1#
呈现线程的调度程序优先级低于UI线程,因此您可以在UI线程中运行循环,一次应用所有更改,然后最终呈现器尝试使用它。
您应该考虑将线绑定到数据点并更新它们。下面是一篇关于如何为多边形实现这一点的文章:http://bea.stollnitz.com/blog/?p=35,您可能会根据自己的需要进行调整。
更新:链接的博客现在已经存档,但可以在github上找到:https://github.com/bstollnitz/old-wpf-blog-多边形绑定从第32条开始