我面临一个小问题。我正在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);
但是尽管如此,当我捏调整大小时,我的矩形仍在调整大小。我不明白为什么或如何解决这个问题。
答案 0 :(得分:0)
WPF操作API不支持独立缩放X和Y,同时还能够旋转。
做这个练习......画一个矩形,在它上面放两个点。现在绘制相同的矩形,这两个点相互对角地移动。根据这些点之间的增量,您将如何决定用户是否尝试旋转或独立缩放X与Y或同时执行两者?我们拥有的信息有限,完全不明确。
这就是为什么应用程序通常会最终拥有特定的句柄'你需要触摸才能明确地进入'旋转'模式或' X / Y调整大小模式'。从实现的角度来看,您将处理该句柄上的操作事件(与控件本身分开)并相应地设置ManipulationOrigin和ManipulationStartingEventArgs.Mode。
(免责声明:我是几年前创建这些API的团队成员)
答案 1 :(得分:0)
从数学角度来看,我看到两种方式,第一种方式与第二种方式相比较简单,但是当你可以进行第二次工作时,它会更令人满意:
<强>首先:强>
您可以决定旋转或缩放是用户打算做的。
我会定义两个向量: v , w ,整数d
代表“距离”。
X
和Y
。它们之间的距离为d
。然后您必须将 w 的长度与d
以及 v 和 w 之间的角度进行比较,将其视为{{ 1}}。
例如alpha
* sin(d
)&lt; d / 4 - &gt; 应该重写为sin(度)<0.25,然后用户想要缩放,否则他会旋转矩形。
<强>第二强> 这将允许用户同时旋转和缩放。
degree
现在,如果用户使用 v 向量进行转换,请对向量 a 执行相同操作,并使宽度更大/更小。 提示:https://processing.org/tutorials/transform2d/