【发布时间】:2014-03-09 11:15:49
【问题描述】:
我正在使用 RenderTransform 对图像执行缩放、平移和旋转。转换不是使用鼠标事件完成的,而是用户单击一个按钮,然后图像将按固定值缩放/平移/旋转。
我的问题是我想在每次执行缩放、平移或旋转时确定图像的新位置/大小。所以我在代码隐藏中添加了 Changed 事件。问题是如何获得新的位置/大小?
请看看我到目前为止做了什么:
XAML:
<Border x:Name="mainImageBorderCtrl" ClipToBounds="True">
<Grid x:Name="imageGridCtrl">
<Grid.RenderTransform>
<TranslateTransform Changed="TranslateTransform_Changed"/>
</Grid.RenderTransform>
<Image x:Name="mainImageCtrl" RenderTransformOrigin="0.5, 0.5" Source="{Binding Image}">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform Changed="ScaleTransform_Changed"/>
<RotateTransform />
</TransformGroup>
</Image.RenderTransform>
</Image>
</Grid>
</Border>
请注意,我将 TranslateTransform 与 ScaleTransform 和 RotateTransform 分开,以免影响方向。
以下是 2 个更改的事件。在这里,我希望每次发生缩放或平移时都能获得新的位置/大小。但边界值不会改变。
代码隐藏
private Rect bounds;
private void TranslateTransform_Changed(object sender, EventArgs e)
{
bounds = imageGridCtrl.TransformToAncestor(mainImageBorderCtrl).TransformBounds(new Rect(imageGridCtrl.RenderSize));
}
private void ScaleTransform_Changed(object sender, EventArgs e)
{
bounds = imageGridCtrl.TransformToAncestor(mainImageBorderCtrl).TransformBounds(new Rect(imageGridCtrl.RenderSize));
}
编辑:我的目标是限制边框控件内图像的平移(平移),这就是为什么我需要在每次转换后获取图像的边界,无论转换是什么,这样我就可以检查Image的边界是否超出了Border。
【问题讨论】:
-
ScaleTransform不会影响边界,因为边界是相同的。它只是内容被缩放。虽然TranslateTransform确实对我有用,但它显示Left和Top将在新的范围内更新。您没有观察到 TranslateTransform 的相同行为吗? -
啊,是的。 ScaleTransform 是我的问题。我的目标是限制边界控件内图像的平移(平移)。这就是为什么我需要知道图像的边界。
-
我已经发布了答案。看看有没有帮助。