如何在WPF中更改曲线的坐标?

时间:2017-04-24 13:49:59

标签: c# wpf

我有一条曲线

PathFigure pathFigure = new PathFigure();             
QuadraticBezierSegment pathSeg = new QuadraticBezierSegment(p2,p3,true);
pathFigure.Segments.Add(pathSeg);
pathFigure.StartPoint = p1;
pathFigure.IsClosed = false;
pathGeometry.Figures.Add(pathFigure);

我如何改变曲线的点?那是我尝试过的:

System.Windows.Point a = new System.Windows.Point(p.X, p.Y);
((BezierSegment)s).SetValue(BezierSegment.Point3Property,a);

但我得到以下异常

  

" System.Windows.Media.BezierSegment"无法设置object属性,因为它处于只读状态。*

异常消息是从波兰语翻译而来的。可能与原始版本不是100%相似。

2 个答案:

答案 0 :(得分:0)

我无法改变坐标,因为我的曲线是冰冻的 我们只需要正确地获得几何

 PathGeometry pathGeometry = (PathGeometry)path.Data; 

 PathGeometry pathGeometry = path.Data.GetOutlinedPathGeometry(); 

答案 1 :(得分:-1)

您的路径或几何图形或其他内容被冻结。您无法更改冻结的对象。查找并省略.Freeze(),然后它应该有效。

来自MSDN:

  

Freezable是一种特殊类型的对象,有两种状态:解冻   和冷冻。解冻后,Freezable似乎表现得像任何一样   其他对象。冻结时,Freezable无法再修改。

     

Freezable提供Changed事件以通知观察者任何事件   对对象的修改。冻结Freezable可以改善它   性能,因为它不再需要在变更上花费资源   通知。冻结的Freezable也可以在线程之间共享,   而一个解冻的Freezable则不能。

     

...

     

一旦冻结,Freezable永远不会被修改或解冻;然而,   您可以使用克隆 CloneCurrentValue 创建未冻结的克隆   方法。

     

如果满足以下任何条件,Freezable将无法冻结:

     

•它具有动画或数据绑定属性。

     

•它具有由动态资源设置的属性。 (参见XAML资源   有关动态资源的更多信息。)

     

•它包含无法冻结的Freezable子对象。