Исключение, анимирующее преобразование макета масштаба в WPF - PullRequest
1 голос
/ 08 февраля 2010

Я создал раскадровку в C # для анимации преобразования масштаба на холсте. Преобразование масштаба является преобразованием макета. Вот мой код C # для анимации:

Storyboard Configuring = new Storyboard();
if (NexusRoot != null)
{
var current = (NexusRoot.LayoutTransform as ScaleTransform).ScaleX;

Duration duration = new Duration(TimeSpan.FromSeconds(1));

DoubleAnimation myDoubleAnimation1 = new DoubleAnimation();
myDoubleAnimation1.Duration = duration;
Configuring.Children.Add(myDoubleAnimation1);
myDoubleAnimation1.From = current;
myDoubleAnimation1.To = scale;
Storyboard.SetTarget(myDoubleAnimation1, NexusRoot);
Storyboard.SetTargetProperty(myDoubleAnimation1, (PropertyPath)new PropertyPathConverter().ConvertFromString("(UIElement.LayoutTransform).(ScaleTransform.ScaleX)"));

DoubleAnimation myDoubleAnimation2 = new DoubleAnimation();
myDoubleAnimation2.Duration = duration;
Configuring.Children.Add(myDoubleAnimation2);
myDoubleAnimation2.From = current;
myDoubleAnimation2.To = scale;

Storyboard.SetTargetName(myDoubleAnimation2, "NexusRoot");
Storyboard.SetTargetProperty(myDoubleAnimation2, (PropertyPath)new PropertyPathConverter().ConvertFromString("(UIElement.LayoutTransform).(ScaleTransform.ScaleY)"));
}

Когда я запускаю эту анимацию, она выдает следующее исключение.

System.ArgumentNullException был поймано сообщение = "значение не может быть null. \ r \ nИмя параметра: dp "
Source = "WindowsBase" ParamName = "dp" Трассировки стека: в System.Windows.DependencyObject.GetValue (DependencyProperty дп) в System.Windows.Media.Animation.Storyboard.ProcessComplexPath (HybridDictionary clockMappings, DependencyObject targetObject, путь к PropertyPath, AnimationClock animationClock, HandoffBehavior handoffBehavior, Int64 слой) в System.Windows.Media.Animation.Storyboard.ClockTreeWalkRecursive (Clock currentClock, DependencyObject содержащая объект, INameScope nameScope, DependencyObject parentObject, String parentObjectName, PropertyPath parentPropertyPath, HandoffBehavior handoffBehavior, HybridDictionary ClockMappings, Int64 слой) в System.Windows.Media.Animation.Storyboard.ClockTreeWalkRecursive (Clock currentClock, DependencyObject содержащая объект, INameScope nameScope, DependencyObject parentObject, String parentObjectName, PropertyPath parentPropertyPath, HandoffBehavior handoffBehavior, HybridDictionary ClockMappings, Int64 слой) в System.Windows.Media.Animation.Storyboard.BeginCommon (DependencyObject содержащая объект, INameScope nameScope, HandoffBehavior handoffBehavior, Boolean isControllable, слой Int64) в System.Windows.Media.Animation.Storyboard.Begin () в StormFront.NexusDesigner.ScaleCanvasAnimation (Double масштаб) в C: \ Документы и Настройки \ lbeaver \ Desktop \ StormFront \ WPF \ StormFront \ StormFront \ NexusDesigner.xaml.cs: линия 544 InnerException:

Как мне остановить это исключение?

1 Ответ

3 голосов
/ 09 февраля 2010

Я нашел свою проблему. Проблема в пути к собственности. Я использовал UIElement и должен был использовать FrameworkElement.

Итак, эта строка:

Storyboard.SetTargetProperty(myDoubleAnimation1, (PropertyPath)new PropertyPathConverter().ConvertFromString("(UIElement.LayoutTransform).(ScaleTransform.ScaleX)"));

должно быть:

Storyboard.SetTargetProperty(myDoubleAnimation1, (PropertyPath)new PropertyPathConverter().ConvertFromString("(FrameworkElement.LayoutTransform).(ScaleTransform.ScaleX)"));
...