У меня кривая

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» не может быть установлено, поскольку оно находится в состоянии только для чтения. *

Сообщение об исключении переведено с польского. Вероятно, не на 100% похож на оригинальный.

-1
Vova Dowhanych 24 Апр 2017 в 16:49

2 ответа

Лучший ответ

Я не мог изменить координаты, потому что моя кривая была заморожена.
Нам просто нужно правильно настроить геометрию .

 PathGeometry pathGeometry = (PathGeometry)path.Data; 

Не

 PathGeometry pathGeometry = path.Data.GetOutlinedPathGeometry(); 
0
Vova Dowhanych 25 Апр 2017 в 09:14

Ваш путь или геометрия или что-то еще заморожено. Вы не можете изменить замороженные объекты. Найдите и пропустите .Freeze(), тогда это должно сработать.

Из MSDN:

Freezable - это особый тип объекта, который имеет два состояния: незамерзший и замороженный. При размораживании Freezable ведет себя как любой другой объект. После замораживания Freezable больше не может быть изменен.

Freezable предоставляет событие Changed для уведомления наблюдателей о любых изменениях объекта. Замораживание Freezable может улучшить его производительность, поскольку ему больше не нужно тратить ресурсы на уведомления об изменениях. Замороженный Freezable также может быть разделен между потоками, а замороженный Freezable - нет.

...

После замораживания Freezable никогда не может быть изменен или заморожен; тем не мение, Вы можете создать незамерзающий клон, используя Clone или CloneCurrentValue метод .

Freezable не может быть заморожен, если выполняется одно из следующих условий:

• Имеет анимированные или привязанные к данным свойства.

• У него есть свойства, установленные динамическим ресурсом. (См. Ресурсы XAML для получения дополнительной информации о динамических ресурсах.)

• Содержит Freezable подобъекты, которые не могут быть заморожены.

-1
Community 20 Июн 2020 в 09:12
43589945