c# - 在 Windows Phone 8 应用程序中捏合缩放、将图像拖动到屏幕上的任意位置

标签 c# wpf windows-phone-7 windows-phone-8 pinchzoom

大家好,最近我为 Windows Phone 8 设备创建了换脸应用程序,其中我设计了一个带有两个图像控件的页面

第一个图像作为背景,第二个图像控件作为前景。

我已将“GestureListener”添加到我的第一个图像控件(背景)中,我必须使用“toolkit:GestureService.GestureListener”“捏合、放大、缩小、拖动”该背景图像。

我做的一切都很好,就像我可以成功地捏合、缩放、拖动图像......但是,

问题是“我无法从触摸屏幕上的手指的任何地方捏合或拖动图像”,因此捏合缩放或拖动对我来说很难放大/缩小或拖动图像。,

但是在 I-Phone/i-pad/i-pod 和所有 Android 设备中,我可以通过捏合来放大/缩小或通过触摸屏幕上的任何位置来拖动图像。,

就像我已经说过的那样,我的第一个图像是可以添加手势控制的背景,第二个图像是无法缩放或拖动的普通图像控制。,

这是我的代码。

我的 XAML 代码:

<Grid x:Name="ContentPanel" Grid.RowSpan="2">
    <Canvas x:Name="screenArea" Width="400" Height="580" >

        <Image x:Name="myImage" Width="400" Height="580"  RenderTransformOrigin="0.5, 0.5" CacheMode="BitmapCache" >
            <Image.RenderTransform>
                <TransformGroup>
                    <CompositeTransform x:Name="MyMustacheTransformation" />
                </TransformGroup>
            </Image.RenderTransform>
            <toolkit:GestureService.GestureListener>
                <toolkit:GestureListener PinchStarted="OnPinchStarted"
                                         PinchDelta="OnPinchDelta"
                                         DragDelta="OnDragDelta"/>
            </toolkit:GestureService.GestureListener>
        </Image>
        <Image x:Name="frameImage" Width="400" Height="580" Stretch="Fill"/>
    </Canvas>
</Grid>

我的inch_start、Drag_delta、pinch_delta的CS代码是

private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e)
{
    _initialAngle = MyMustacheTransformation.Rotation;
    _initialScale = MyMustacheTransformation.ScaleX;
}

private void OnPinchDelta(object sender, PinchGestureEventArgs e)
{
    MyMustacheTransformation.Rotation = _initialAngle + e.TotalAngleDelta;
    MyMustacheTransformation.ScaleX = _initialScale * e.DistanceRatio;
    MyMustacheTransformation.ScaleY = _initialScale * e.DistanceRatio; 
}

private void OnDragDelta(object sender, DragDeltaGestureEventArgs e)
{
    Image rect = sender as Image;
    TranslateTransform transform = rect.RenderTransform as TranslateTransform;

    MyMustacheTransformation.TranslateX += e.HorizontalChange;
    MyMustacheTransformation.TranslateY += e.VerticalChange;
}

我希望您能理解我的问题,如果我的话不清楚,请见谅。

如果您已经在 Android/i-phone/pod/pad 设备上使用过换脸应用程序,则意味着他们可以轻松理解您的期望。,

我的目标是:

“我可以通过捏合来放大/缩小,从触摸布局上的任何位置拖动图像......就像在 iPhone/Pod/Pad 和 Android 设备中一样”

我已经挣扎了几周了。请提供一些解决方案。

如果您提供任何示例代码,这对我来说可能更有用。,

提前谢谢大家。

最佳答案

问题在于您将 GestureListener 附加到了图像,因此只有在触摸图像时才会收到手势。

将监听器附加到最外面的Grid

关于c# - 在 Windows Phone 8 应用程序中捏合缩放、将图像拖动到屏幕上的任意位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21645176/

相关文章:

c# - 自动递增日期时间

c# - 如何对具有多个子层的根 ViewModel 进行单元测试?

c# - 无法在 WP7 中滚动列表框

c# - 如何使用 LINQ to XML 查询日期时间值?

c# - EF Core - 在一个请求中添加/更新实体和添加/更新/删除子实体

c# - 在 PHP 文件中解析 SQL 的最佳方法?

c# - WPF DispatcherFrame 魔术 - 这是如何以及为什么起作用的?

windows-mobile - Visual Studio 2010 中的智能设备项目

c# - 并行运行时 IronPDF 死锁

wpf - 无应用程序对象模式下的 Caliburn micro,就像在 AutoCAD dll 插件中一样