private bool CanOptimizeAnimation(KeyFrameAnimationSceneNode nodeToTest) { TimelineSceneNode.PropertyNodePair elementAndProperty = nodeToTest.TargetElementAndProperty; if (elementAndProperty.PropertyReference == null || FromToAnimationSceneNode.GetFromToAnimationForType((ITypeId)elementAndProperty.PropertyReference.ValueTypeId, nodeToTest.ProjectContext) == null || (nodeToTest.KeyFrameCount != 1 || DesignTimeProperties.ExplicitAnimationProperty.Equals((object)elementAndProperty.PropertyReference[0]))) { return(false); } KeyFrameSceneNode keyFrameAtIndex = nodeToTest.GetKeyFrameAtIndex(0); Duration? nullable = nodeToTest.GetLocalOrDefaultValueAsWpf(TimelineSceneNode.DurationProperty) as Duration?; bool flag = !nullable.HasValue || nullable.Value == Duration.Automatic || nullable.Value.HasTimeSpan && nullable.Value.TimeSpan.TotalSeconds == keyFrameAtIndex.Time; if (keyFrameAtIndex.InterpolationType != KeyFrameInterpolationType.Easing || !flag) { return(false); } foreach (IMemberId memberId in (IEnumerable <IProperty>)((DocumentCompositeNode)nodeToTest.DocumentNode).Properties.Keys) { switch (memberId.Name) { case "Duration": case "TargetName": case "TargetProperty": case "BeginTime": case "IsAnimationProxy": case "KeyFrames": case "ShouldSerialize": continue; default: return(false); } } return(true); }