我正在开发一个WPF应用程序,允许用户使用多点触控来使用MatrixTransform.Matrix
上的RenderTransform
来操作图像。使用this very helpful snippet of code,我能够使用在C#中创建的故事板为其设置动画。
问题是currentItem
似乎总是相对于左上角旋转和缩放。
如何围绕FrameworkElement
的中心旋转?
这是我到目前为止的一个使用动画的基本示例:
Matrix fromMatrix = ((MatrixTransform)currentItem.RenderTransform).Matrix;
Matrix toMatrix = new MatrixTransform().Matrix;
//Making sure location of the toMatrix is in the same place as the fromMatrix
toMatrix.OffsetX = fromMatrix.OffsetX;
toMatrix.OffsetY = fromMatrix.OffsetY;
MatrixAnimation myDoubleAnimation = new MatrixAnimation();
myDoubleAnimation.From = fromMatrix;
myDoubleAnimation.To = toMatrix;
myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(.5));
Storyboard myStoryboard = new Storyboard();
myStoryboard.Children.Add(myDoubleAnimation);
Storyboard.SetTarget(myDoubleAnimation, currentItem);
Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath("(FrameworkElement.RenderTransform).(MatrixTransform.Matrix)"));
myStoryboard.Begin(this);
我觉得我需要在fromMatrix.OffsetY
和fromMatrix.OffsetX
中添加或减去。我尝试用currentItem
的宽度/高度的一半进行此操作,但这要么将其旋转并围绕中心(好) OR 两次缩放远离中心(两倍差),具体取决于currentItem
在开始制作动画时转向的方式。
答案 0 :(得分:0)
这里的回答太晚了 - 但我相信你只是使用 XAML 属性
RenderTransformOrigin="0.5, 0.5"
将其放在应用了转换的 XAML 上。不确定是否需要在代码隐藏中执行此操作,除非您在代码中构建了该对象。