4

最初に中央に配置された画像を表示する WPF アプリを作成しています。ユーザーは、 と を使用して実装されている画像の拡大/縮小と移動を行うことができScaleTransformますTranslateTransform。それはうまくいきます。

問題は、画像がウィンドウよりもかなり大きく、ユーザーが画像を移動したり、画像全体が見えるようにズームアウトしたりする場合です。元々非表示だった画像の部分はレンダリングされず、代わりに画像の元々表示されていた部分のみが描画されます。

他のいくつかの 質問に基づいて、画像を の中に入れると、画像Canvas全体がレンダリングされ、移動すると正しくレンダリングされます。Canvas問題は、他のレイアウトが発生するのを防ぐため、画像を に配置したくないことです.HorizontalAlignmentおよびVerticalAlignmentプロパティは無視されます (したがって、画像は中央に配置されなくなります)。描画するオプションを実装する必要があります。ウィンドウの領域全体を埋めるために画像をできるだけ大きくすると、機能しなくなります (Stretchプロパティを に設定しても何も起こりUniformToFillません)。

現在、2 つの変換がRenderTransformプロパティに設定されています。代わりに使用LayoutTransformすると、画像全体が描画されますが、これにより、ユーザーが画像の一部をウィンドウの端から移動することもできなくなります (これは維持したい動作です)。

Canvasまたはを使用せずに常に画像全体をレンダリングするように WPF に指示するにはどうすればよいLayoutTransformですか?

4

1 に答える 1

1

TranslateTransform を使用するのではなく、ScrollViewer を使用することをお勧めします。

<ScrollViewer>
   <Grid>
      <Image Source="blabla">
          <Image.LayoutTransform>
              <ScaleTransform />
          </Image.LayoutTransform>
      </Image>
   </Grid>
</ScrollViewer>

ScrollViewer は Image を拡大するための無限のスペースを提供し、イメージ全体がレンダリングされます。グリッドは、画像を拡大できるようにしながら、レイアウトを強制的に中央に配置します。スクロールバーで翻訳を制御したくない場合は、それらを非表示にして独自のソリューションをロールバックできます。

LayoutTransform は、(ズームに基づく) ピクセル単位の画像の実際のサイズがウィンドウに適切に反映されるようにするための方法です。

于 2013-02-26T16:11:22.437 に答える