2017-09-28 9 views
0

私は、ユーザーの画像を表示し、マウスのスクロールを使用して画像を拡大または縮小できるWpfユーザーコントロールを作成しました。画像サイズがそのコンテナより大きい場合にスクロールを許可するscrollviewerコントロールを使用しています。 Scrollviewerは、イメージのサイズがそのコンテナよりも大きい場合は正常に動作します。しかし、画像サイズがコンテナよりも小さい場合、スクロールは消えません。画像がコンテナの内側に収まるようにするには、スクロールを消すにはどうすればよいですか。以下は、私が使用していますXAMLである:ここではWpfスクロールビューワを画像スケーリングに合わせて調整するには?

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
     <Grid Grid.Row="0"> 
      <!--<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">--> 
      <Image x:Name="PdfImage" RenderTransformOrigin="0.5,0.5" MouseWheel="PdfImage_MouseWheel" ClipToBounds="True"> 
       <Image.RenderTransform> 
        <ScaleTransform x:Name="scale" ScaleX="1" ScaleY="1" CenterX="0.5" CenterY="0.5" /> 
       </Image.RenderTransform> 
      </Image> 
      <!--</ScrollViewer>--> 
     </Grid> 
    </ScrollViewer> 

は、私は、ユーザーが画像に拡大または縮小できるようにするために使用していたコードです:

if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) 
{ 
        var st = (ScaleTransform)PdfImage.RenderTransform; 
        double zoom = e.Delta > 0 ? .2 : -.2; 
        double newXScaleValue = st.ScaleX + zoom; 
        double newYScaleValue = st.ScaleY + zoom; 
        if ((newXScaleValue >= 0.1 && newXScaleValue <= 4) && (newYScaleValue >= 0.1 && newYScaleValue <= 4)) 
        { 
         st.ScaleX += zoom; 
         st.ScaleY += zoom; 
        } 
} 
+0

'PdfImage_MouseWheel'コードも追加できますか?内部スクロールビューア(およびグリッド)を含む理由 – Sinatr

+0

@Sinatrコードを追加しました。そして、私はscrollviewerをImageと親グリッドに直接追加しようとしましたが、どちらもうまくいきませんでした。 –

+0

イメージ(初期サイズで)がScrollViewerに適合すると、スクロールバーが消えますか? –

答えて

1

あなたは変換レンダリングを適用しています。この種の変換は、メジャーの後に適用され、ステップを配置し、レイアウトとは独立しています。スクロールビューアの観点から、コンテンツの幅と高さは決して変化しません。代わりにImage.LayoutTranformを使用してみてください。

関連する問題