У меня кривая
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% похож на оригинальный.
2 ответа
Я не мог изменить координаты, потому что моя кривая была заморожена.
Нам просто нужно правильно настроить геометрию .
PathGeometry pathGeometry = (PathGeometry)path.Data;
Не
PathGeometry pathGeometry = path.Data.GetOutlinedPathGeometry();
Ваш путь или геометрия или что-то еще заморожено. Вы не можете изменить замороженные объекты. Найдите и пропустите .Freeze()
, тогда это должно сработать.
Из MSDN:
Freezable - это особый тип объекта, который имеет два состояния: незамерзший и замороженный. При размораживании Freezable ведет себя как любой другой объект. После замораживания Freezable больше не может быть изменен.
Freezable предоставляет событие Changed для уведомления наблюдателей о любых изменениях объекта. Замораживание Freezable может улучшить его производительность, поскольку ему больше не нужно тратить ресурсы на уведомления об изменениях. Замороженный Freezable также может быть разделен между потоками, а замороженный Freezable - нет.
...
После замораживания Freezable никогда не может быть изменен или заморожен; тем не мение, Вы можете создать незамерзающий клон, используя Clone или CloneCurrentValue метод .
Freezable не может быть заморожен, если выполняется одно из следующих условий:
• Имеет анимированные или привязанные к данным свойства.
• У него есть свойства, установленные динамическим ресурсом. (См. Ресурсы XAML для получения дополнительной информации о динамических ресурсах.)
• Содержит Freezable подобъекты, которые не могут быть заморожены.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.