WPF通过操作调整矩形大小不保持比例

时间:2015-01-15 14:02:34

标签: c# wpf image

我面临一个小问题。我正在WPF上设计一个可在Windows 8.1平板电脑上运行的应用程序。我正在建立一种"裁剪"软件(除其他外)。

为此,我在我的窗口上创建了一个Rectangle,并在此处遵循Microsoft演练: http://msdn.microsoft.com/en-us/library/vstudio/ee649090(v=vs.100).aspx

因为我不想保留矩形方块,所以我在Scale.Y

上设置ManipulationDelta来更改其示例

这里是更改后的代码

rectsMatrix.ScaleAt(e.DeltaManipulation.Scale.X,
                    e.DeltaManipulation.Scale.Y,
                    e.ManipulationOrigin.X,
                    e.ManipulationOrigin.Y);

但是尽管如此,当我捏调整大小时,我的矩形仍在调整大小。我不明白为什么或如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

WPF操作API不支持独立缩放X和Y,同时还能够旋转。

做这个练习......画一个矩形,在它上面放两个点。现在绘制相同的矩形,这两个点相互对角地移动。根据这些点之间的增量,您将如何决定用户是否尝试旋转或独立缩放X与Y或同时执行两者?我们拥有的信息有限,完全不明确。

这就是为什么应用程序通常会最终拥有特定的句柄'你需要触摸才能明确地进入'旋转'模式或' X / Y调整大小模式'。从实现的角度来看,您将处理该句柄上的操作事件(与控件本身分开)并相应地设置ManipulationOrigin和ManipulationStartingEventArgs.Mode。

(免责声明:我是几年前创建这些API的团队成员)

答案 1 :(得分:0)

从数学角度来看,我看到两种方式,第一种方式与第二种方式相比较简单,但是当你可以进行第二次工作时,它会更令人满意:

<强>首先: 您可以决定旋转或缩放是用户打算做的。 我会定义两个向量: v w ,整数d代表“距离”。

  • 将用户触及的两点作为XY。它们之间的距离为d
  • 将矢量XY设为 v
  • 将用户手指(X和Y)定义的新矢量设为 w

然后您必须将 w 的长度与d以及 v w 之间的角度进行比较,将其视为{{ 1}}。

例如alpha * sin(d)&lt; d / 4 - &gt; 应该重写为sin(度)<0.25,然后用户想要缩放,否则他会旋转矩形。

<强>第二 这将允许用户同时旋转和缩放。

  • 选择X和Y,定义 v
  • 取矩形,例如左侧,并将该矢量命名为: a
  • 矩形可以定义为矢量及其连接(透明)边(90度),因此将底边的长度设为degree

现在,如果用户使用 v 向量进行转换,请对向量 a 执行相同操作,并使宽度更大/更小。 提示:https://processing.org/tutorials/transform2d/