2015-08-08 27 views
2

我有在Scrollviewer一个Image ...移动影像

<ScrollViewer x:Name="Scrollster" ZoomMode="Enabled" MinZoomFactor="1" MaxZoomFactor="4" 
      HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" ManipulationMode="All"> 
    <Image x:Name="Img" Source="{x:Bind ImgSource}" Stretch="UniformToFill" PointerPressed="Img_PointerPressed"/> 
</ScrollViewer> 

我想,当我拖动图像与鼠标指针移动的图像!

我想:

private void Img_PointerPressed(object sender,PointerRoutedEventArgs e) 
{ 
    var p = e.Pointer; 
} 

,但我不能让指针位置改变的ScrollViewer现在的位置。

我的代码有什么问题?我做对了吗?

回答

6

而应该在Img控制上设置ManipulationMode。此外,您可能需要指定所需的确切模式,而不是All以防止不必要的手势处理。

<Image x:Name="Img" Source="{x:Bind ImgSource}" Width="150" Height="150" Stretch="UniformToFill" 
     ManipulationMode="TranslateX, TranslateY" 
     ManipulationStarted="Img_ManipulationStarted" 
     ManipulationDelta="Img_ManipulationDelta" 
     ManipulationCompleted="Img_ManipulationCompleted"> 
    <Image.RenderTransform> 
     <CompositeTransform x:Name="Transform" /> 
    </Image.RenderTransform> 
</Image> 

从上面你的描述,我想打开两个TranslateXTranslateY应该是足够的。然后您需要处理诸如ManipulationStarted,ManipulationDeltaManipulationCompleted之类的操纵事件。

你的大部分逻辑都应该在ManipulationDelta事件中完成,这个事件会在平移过程中被多次触发。这是您获取XY职位并相应设置的位置。

这是一个简单的例子。

void Img_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) 
{ 
    // dim the image while panning 
    this.Img.Opacity = 0.4; 
} 

void Img_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) 
{ 
    this.Transform.TranslateX += e.Delta.Translation.X; 
    this.Transform.TranslateY += e.Delta.Translation.Y; 
} 

void Img_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) 
{ 
    // reset the Opacity 
    this.Img.Opacity = 1; 
} 
+0

工作正常,但现在在触摸模式(表和移动)我不能捏缩放放出!有什么问题?我应该问一个新的话题吗? – Shahriar

+0

我相信你需要打开'ManipulationModes.Scale'并手动处理'this.Transform.ScaleX'和'this.Transform.ScaleY'。或者,也许,当有多个联系人时,禁用'ManipulationMode'并让系统处理放大/缩小。 –

+1

现在我知道如何解决它:将系统添加到ManipulationMode将修复它。我的意思是:'ManipulationMode =“TranslateX,TranslateY,System”' – Shahriar