c# wpf执行缩放,转换,使用增量操作

本文关键字:操作 转换 wpf 执行 缩放 | 更新日期: 2023-09-27 18:13:49

我试图在椭圆上执行缩放和平移变换,这是我的代码:

void ellipse_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
   {
       Ellipse rp = (Ellipse)sender;
       if (e.PinchManipulation != null)
       {
           ((CompositeTransform)rp.RenderTransform).ScaleX *= e.DeltaManipulation.Scale.X;
           ((CompositeTransform)rp.RenderTransform).ScaleY *= e.DeltaManipulation.Scale.X;
       }
       ((CompositeTransform)rp.RenderTransform).TranslateX += e.DeltaManipulation.Translation.X;
       ((CompositeTransform)rp.RenderTransform).TranslateY += e.DeltaManipulation.Translation.Y;
   }

代码工作得很好,但问题是,在执行缩放变换后,翻译不能完美地工作,它要么变慢要么跳跃,我认为这是因为缩放操作中中心的位置发生了变化。我该如何避免呢?有什么建议吗?

c# wpf执行缩放,转换,使用增量操作

下面是您尝试执行的操作类型的示例。根据我在那个样本中看到的,你的问题是你没有设置尺度变换的中心点。

从链接到的示例/演练:

Point center = new Point(this.BasicRect.RenderSize.Width / 2.0, this.BasicRect.RenderSize.Height / 2.0);
this.scale.CenterX = center.X;
this.scale.CenterY = center.Y;
this.scale.ScaleX *= e.DeltaManipulation.Scale.X;
this.scale.ScaleY *= e.DeltaManipulation.Scale.Y;