@@ -631,41 +631,48 @@ private Line CreateAnchor(UIElement element, double x, double y)
631
631
var anchorVisual = ElementCompositionPreview . GetElementVisual ( anchor ) ;
632
632
var elementVisual = ElementCompositionPreview . GetElementVisual ( element ) ;
633
633
var centerVisual = ElementCompositionPreview . GetElementVisual ( _centerContent ) ;
634
- var elementNode = elementVisual . GetReference ( ) ;
635
- var centerNode = centerVisual . GetReference ( ) ;
636
634
637
- ScalarNode expression ;
638
- var elementY = elementNode . Offset . Y + ( elementNode . Size . Y / 2 ) ;
639
- var centerY = centerNode . Offset . Y + ( centerNode . Size . Y / 2 ) ;
640
- var elementX = elementNode . Offset . X + ( elementNode . Size . X / 2 ) ;
641
- var centerX = centerNode . Offset . X + ( centerNode . Size . X / 2 ) ;
635
+ string expression = string . Empty ;
636
+ var elementY = "(elementVisual .Offset.Y + elementVisual .Size.Y / 2)" ;
637
+ var centerY = "(centerVisual .Offset.Y + centerVisual .Size.Y / 2)" ;
638
+ var elementX = "(elementVisual .Offset.X + elementVisual .Size.X / 2)" ;
639
+ var centerX = "(centerVisual .Offset.X + centerVisual .Size.X / 2)" ;
642
640
643
641
var startingAngle = Math . Atan2 ( y , x ) ;
644
642
645
643
if ( startingAngle > Math . PI / 4 && startingAngle < 3 * Math . PI / 4 )
646
644
{
647
- expression = ExpressionFunctions . ATan ( ( - 1 * ( elementX - centerX ) ) / ( elementY - centerY ) ) - ( ( float ) Math . PI / 2.0f ) ;
645
+ expression = $ "Atan ((-1 * ({ elementX } - { centerX } )) / ( { elementY } - { centerY } )) - PI / 2" ;
648
646
}
649
647
else if ( startingAngle >= 3 * Math . PI / 4 || startingAngle < - 3 * Math . PI / 4 )
650
648
{
651
- expression = ExpressionFunctions . ATan ( ( elementY - centerY ) / ( elementX - centerX ) ) + ( float ) Math . PI ;
649
+ expression = $ "Atan(( { elementY } - { centerY } ) / ({ elementX } - { centerX } )) + PI" ;
652
650
}
653
651
else if ( startingAngle >= - 3 * Math . PI / 4 && startingAngle < Math . PI / - 4 )
654
652
{
655
- expression = ExpressionFunctions . ATan ( ( elementX - centerX ) / ( - 1 * ( elementY - centerY ) ) ) + ( ( float ) Math . PI / 2.0f ) ;
653
+ expression = $ "Atan(( { elementX } - { centerX } ) / (-1 * ({ elementY } - { centerY } ))) + PI / 2" ;
656
654
}
657
655
else
658
656
{
659
- expression = ExpressionFunctions . ATan ( ( elementY - centerY ) / ( elementX - centerX ) ) ;
657
+ expression = $ "Atan(( { elementY } - { centerY } ) / ({ elementX } - { centerX } ))" ;
660
658
}
661
659
662
660
anchorVisual . CenterPoint = new Vector3 ( 0 ) ;
663
- anchorVisual . StartAnimation ( nameof ( anchorVisual . RotationAngle ) , expression ) ;
664
-
665
- var offsetExpression = ExpressionFunctions . Vector3 ( centerNode . Offset . X + ( centerNode . Size . X / 2 ) , centerNode . Offset . Y + ( centerNode . Size . Y / 2 ) , 0 ) ;
661
+ var rotationExpression = _compositor . CreateExpressionAnimation ( ) ;
662
+ rotationExpression . Expression = expression ;
663
+ rotationExpression . SetReferenceParameter ( "centerVisual" , centerVisual ) ;
664
+ rotationExpression . SetReferenceParameter ( "elementVisual" , elementVisual ) ;
665
+ anchorVisual . StartAnimation ( nameof ( anchorVisual . RotationAngle ) , rotationExpression ) ;
666
+
667
+ var offsetExpression = _compositor . CreateExpressionAnimation ( ) ;
668
+ offsetExpression . Expression = "Vector3(centerVisual.Offset.X + centerVisual.Size.X / 2, centerVisual.Offset.Y + centerVisual.Size.Y / 2, 0)" ;
669
+ offsetExpression . SetReferenceParameter ( "centerVisual" , centerVisual ) ;
666
670
anchorVisual . StartAnimation ( nameof ( anchorVisual . Offset ) , offsetExpression ) ;
667
671
668
- var scaleExpression = ExpressionFunctions . Vector3 ( ExpressionFunctions . Pow ( ExpressionFunctions . Pow ( elementX - centerX , 2 ) + ExpressionFunctions . Pow ( elementY - centerY , 2 ) , 0.5f ) / 80 , 1 , 1 ) ;
672
+ var scaleExpression = _compositor . CreateExpressionAnimation ( ) ;
673
+ scaleExpression . Expression = $ "Vector3(Pow(Pow({ elementX } - { centerX } , 2) + Pow({ elementY } - { centerY } , 2), 0.5)/100, 1, 1)";
674
+ scaleExpression . SetReferenceParameter ( "centerVisual" , centerVisual ) ;
675
+ scaleExpression . SetReferenceParameter ( "elementVisual" , elementVisual ) ;
669
676
anchorVisual . StartAnimation ( nameof ( anchorVisual . Scale ) , scaleExpression ) ;
670
677
671
678
return anchor ;
0 commit comments