如何使用操作模式转换图像而不剪切

时间:2016-03-03 12:25:15

标签: win-universal-app windows-10-universal

我正在尝试创建一个简单的应用程序,允许用户使用TranslateTransform事件处理程序在Image控件内移动ManipulationDelta的图像。

然而,执行翻译操作,图像以奇怪的方式被剪裁。事实上,它似乎是整个视口被翻译而不是视口内的图像。

我在这个非常简单的应用程序中重现了这种行为:

代码很简单,看起来像这样:

    <Image
        x:Name="Image"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Stretch"
        Stretch="None"
        ManipulationMode="TranslateX, TranslateY"
        ManipulationStarted="Image_ManipulationStarted"
        ManipulationCompleted="Image_ManipulationCompleted"
        ManipulationDelta="Image_ManipulationDelta"
        Source="/Assets/image.png"
        >
        <Image.RenderTransform>
            <TranslateTransform x:Name="Translation" />
        </Image.RenderTransform>
    </Image>

这是背后的代码:

    private void Image_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
    {
        Translation.X += e.Delta.Translation.X;
        Translation.Y += e.Delta.Translation.Y;
    }

此应用程序显示矩形600x600纯红色图像。我已经调整了应用程序的大小,使图像比可用的客户区域大。当用户稍微向左上方移动图像时,这就是应用程序的样子:

enter image description here

正如我所解释的那样,似乎已经翻译了整个视口。

enter image description here

如果我虚拟地将图像添加到上面的屏幕截图中,这就是我所期望的:

enter image description here

在上面的屏幕截图中,可以看到图像比应用程序更高,因此客户区的整个高度应该覆盖图像的红色部分。喜欢,因为图像已经向左移动,只有右侧屏幕的一小部分应该是白色的。

我希望这些屏幕截图有助于理解我的解释。

请使用ManipulationMode时是否可以获得所需的行为?

1 个答案:

答案 0 :(得分:0)

  

请使用ManipulationModes时是否可以获得所需的行为?

我认为答案是否定的,在UWP应用中无法做到这一点,您需要创建一个桌面应用来获得所需的行为。

在UWP应用中,Page位于Frame,然后控件或形状位于Page中,因此基本上控件或形状都在{{1}中}} 容器。你想要做的是从容器中取出Frame,在这种情况下,我们需要在UWP应用程序中为此Rectangle提供另一个容器。

所以我能想到的就是创建一个新窗口来保存Rectangle。但是这个新窗口会出现问题,应用程序的标题是一个新窗口,除非此窗口处于全屏模式。显然,全屏模式窗口无法解决问题。

此功能可以使用Win32 API完成,您可以参考C# Drag-and-Drop: Show the dragged item while dragging,但UWP应用程序不支持此API。它们仅适用于桌面应用。例如,您可以参考CreateIconIndirect function。此外,我找不到任何支持相同功能的UWP应用程序的API。