7,655
社区成员
发帖
与我相关
我的任务
分享
private void img_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
FrameworkElement element = (FrameworkElement)e.Source;
element.Opacity = 0.5;
//Matrix matrix = ((MatrixTransform)element.RenderTransform).Matrix;
Matrix matrix = ((MatrixTransform)Matrix1 ).Matrix;
var deltaManipulation = e.DeltaManipulation;
Point center = new Point(element.ActualWidth / 2, element.ActualHeight / 2);
center = matrix.Transform(center);
matrix.ScaleAt(deltaManipulation.Scale.X, deltaManipulation.Scale.Y, center.X, center.Y);
matrix.RotateAt(e.DeltaManipulation.Rotation, center.X, center.Y);
matrix.Translate(e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y);
//以下为飞出边界则停止惯性,但实际测试不太生效,还是会飞出窗口,不见了
Rect containingRect = new Rect(((FrameworkElement)e.ManipulationContainer).RenderSize);
Rect shapeBounds = element.RenderTransform.TransformBounds(new Rect(element.RenderSize));
if (e.IsInertial && !containingRect.Contains(shapeBounds))
{
e.ReportBoundaryFeedback(e.DeltaManipulation);
e.Complete();
}
((MatrixTransform)Matrix1).Matrix = matrix;
}
<Border x:Name="border" Width="350" Height="350" BorderBrush="Red" BorderThickness="1">
<Image x:Name="img" Source="xxx.png" MaxWidth="{Binding ActualWidth,ElementName=border}">
<Image.LayoutTransform>
<ScaleTransform ScaleX="{Binding xx}" ScaleY="{Binding xx}"></ScaleTransform>
</Image.LayoutTransform>
</Image>
</Border>