2016-05-22 4 views
7

、(ピンチズーム、ダブルタップでの)画像をズーム。UWP - 私は(フリップビューcontrollを使用して)画像を表示し、ユーザーが(ピンチズームで、ダブルタップで)それらをズームしてズーム画像をドラッグできるようにする必要がフリップビュー

私はそれがフリップビュー(私はそれがジェスチャーをdraging ovverideべきではありません意味)と互換性があるようにしたいと思います。

それを達成するための最良の方法は何ですか?

答えて

7

画像を表示するには(フリップビューコントロールを使用)、ユーザーが(ピンチズームとダブルタップで)ズームしてズームした画像をドラッグする必要があります。

我々は、ユーザーが(ピンチズームで、ダブルタップで)画像をズームすると、ズーム画像をドラッグできるようにするためにScrollViewer制御とUIElement.DoubleTappedイベントを使用することができます。ピンチズームで画像を拡大し、ズーム画像をドラッグするために

。我々はScrollViewerImageを入れることができます。

私たちは、ダブルタップで画像をズームするScrollViewerUIElement.DoubleTappedイベントを追加することができます。例えば

:XAMLで

public ObservableCollection<MyImage> MyImages; 

public MainPage() 
{ 
    this.InitializeComponent(); 
    MyImages = new ObservableCollection<MyImage>(); 
    MyImages.Add(new MyImage("ms-appx:///Assets/cliff.jpg")); 
    MyImages.Add(new MyImage("ms-appx:///Assets/grapes.jpg")); 
    MyImages.Add(new MyImage("ms-appx:///Assets/rainer.jpg")); 
    MyImages.Add(new MyImage("ms-appx:///Assets/sunset.jpg")); 
    MyImages.Add(new MyImage("ms-appx:///Assets/valley.jpg")); 
    MyFlipView.ItemsSource = MyImages; 
} 

private async void scrollViewer_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) 
{ 
    var scrollViewer = sender as ScrollViewer; 
    var doubleTapPoint = e.GetPosition(scrollViewer); 

    if (scrollViewer.ZoomFactor != 1) 
    { 
     scrollViewer.ZoomToFactor(1); 
    } 
    else if (scrollViewer.ZoomFactor == 1) 
    { 
     scrollViewer.ZoomToFactor(2); 

     var dispatcher = Window.Current.CoreWindow.Dispatcher; 
     await dispatcher.RunAsync(CoreDispatcherPriority.High,() => 
     { 
      scrollViewer.ScrollToHorizontalOffset(doubleTapPoint.X); 
      scrollViewer.ScrollToVerticalOffset(doubleTapPoint.Y); 
     }); 
    } 
} 

そしてMYIMAGEクラスコード::背後にあるコードで

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <FlipView Name="MyFlipView"> 
      <FlipView.ItemTemplate> 
       <DataTemplate x:DataType="local:MyImage"> 
        <ScrollViewer MinZoomFactor="1" DoubleTapped="scrollViewer_DoubleTapped" 
        ZoomMode="Enabled"> 
         <Image Source="{Binding Path}" /> 
        </ScrollViewer> 
       </DataTemplate> 
      </FlipView.ItemTemplate> 
     </FlipView> 
    </Grid> 

public class MyImage 
{ 
    public MyImage() 
    { 
    } 

    public MyImage(string uri) 
    { 
     this.Path = uri; 
    } 

    public string Path { get; set; } 
} 
+0

は残念ながら、それが問題を引き起こしました。私がギャラリーに行くと、私のイメージはすでに拡大されています(ストレッチ= "ユニフォーム"はうまくいきませんでした)。どうすれば修正できますか? – michalsol

+0

'ScrollViewer'の' VerticalScrollBarVisibility = "オート" Horizo​​ntalScrollBarVisibility = "オート" を '削除してください。私は私の答えを更新しました。 –

+0

よろしくお願いします!私はまた、のコントロールの中にイメージを置く必要があったが、それは今では動作する! :) – michalsol

関連する問題