2013-02-26 76 views
4

我在寫一個WPF應用程序,它顯示最初居中的圖像。用戶可以放大/縮小並移動圖像,這些圖像使用ScaleTransformTranslateTransform實現。這很好。如何防止WPF裁剪我的圖像?

問題是當圖像明顯大於窗口,並且用戶移動圖像或縮小到足以使整個圖像可見時。最初隱藏的圖像部分不會被渲染,而只會繪製圖像最初可見的部分。基於一些otherquestions

,如果我把我的形象Canvas,這將導致整個圖像渲染,並在移動時它會被正確地渲染的內部。問題是我不希望我的圖像位於Canvas中,因爲這會阻止發生任何其他佈局 - HorizontalAlignmentVerticalAlignment屬性會被忽略(因此圖像不再居中),而且我需要實現一個選項這將盡可能大地繪製圖像以填充不再起作用的窗口的整個區域(將Stretch屬性設置爲UniformToFill不做任何事情)。

目前這兩個轉換設置爲RenderTransform屬性。如果我使用LayoutTransform來代替整個圖像,但這也會阻止用戶將圖像的任何部分從窗口邊緣移出(這是我想保留的行爲)。

如何讓WPF始終呈現整個圖像而不使用CanvasLayoutTransform

回答

1

我建議不要使用TranslateTransform,而應該依靠ScrollViewer。

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

的的ScrollViewer給出了圖像的無限空間擴大,整個圖像將被渲染。網格強制居中佈局,同時仍然允許圖像展開。如果你不喜歡滾動條來控制翻譯,那麼你可以隱藏它們並推出你自己的解決方案。

LayoutTransform是definetely的路要走,所以在像素(基於變焦),圖像的實際尺寸是否正確反映到你的窗口。

+0

這似乎確實工作得很好。有一件不起作用的東西(我承認在這個問題中忘了提及 - 對不起!)是因爲我的圖像有一個'RenderTransformOrigin'設置爲'0.5,0.5'​​,因此縮放操作在圖像的中心。使用ScrollViewer放大圖像,最後聚焦在圖像的左上角。在這種情況下,是否有某種方法可以強制縮放操作在圖像的中心? – Andy 2013-02-26 17:15:52

+0

Andy:http://stackoverflow.com/questions/6447114/how-to-keep-area-of-canvas-centered-in-a-scrollviewer-when-zoomed-in-or-out-and回答你的問題。 – Bas 2013-02-27 16:16:55

+0

是的,這似乎工作得很好。我必須做出的唯一改變是爲了響應ScrollViewer的OnScrollChanged()而改變滾動偏移量,因爲在我的情況下滾動信息還沒有更新,並且我得到了一些奇怪的結果。謝謝您的幫助。 :) – Andy 2013-02-27 17:44:35