2016-02-18 167 views
1

我使用畫布與ImageBrush來顯示圖像。我將畫布的大小設置爲圖像的原始大小,以便我可以在移動鼠標時獲得座標。尺寸過大時畫布被裁剪

問題是,當我將畫布放在控件中(例如Grid)與Canvas被裁剪成較小的尺寸。

<Grid> 
    <Canvas Width="{Binding ImageWidth}" Height="{Binding ImageHeight}" > 
     <Canvas.Background> 
      <ImageBrush ImageSource="{Binding Image, Converter={StaticResource imgConverter}}"/> 
     </Canvas.Background> 
    </Canvas> 
    </Grid> 

有沒有辦法讓畫布大小沒有被修剪?

+2

要麼將​​畫布放在視圖框中,以便縮小到適合網格大小,要麼使用ScrollViewer使畫布可滾動。 – Clemens

回答

1

我一直在深入挖掘源的含義,以確定現在剪切發生在哪裏,但從來沒有做過。當這是一種解決方法時,我一直在使用一種不太好的方法將Canvas插入到可視化樹中。

有一些控件可以剪裁兒童視覺效果; Grid,StackPanel等等。正如我所提到的,通常的快速解決方法是在導致剪輯的容器之後使用Canvas

在你的代碼片中有更多的容器在視覺樹上面嗎?

如果深度竟是這樣的: -

<StackPanel> 
    <Grid> 
     <Canvas Width="{Binding ImageWidth}" Height="{Binding ImageHeight}" > 
      <Canvas.Background> 
       <ImageBrush ImageSource="{Binding Image, Converter={StaticResource imgConverter}}"/> 
      </Canvas.Background> 
     </Canvas> 
    </Grid> 
</StackPanel> 

那麼這可能會導致裁剪。如果在視覺樹上插入另一個Canvas,則刪除此剪輯。

<StackPanel> 
    <Canvas> 
     <Grid> 
      <Canvas Width="{Binding ImageWidth}" Height="{Binding ImageHeight}" > 
       <Canvas.Background> 
        <ImageBrush ImageSource="{Binding Image, Converter={StaticResource imgConverter}}"/> 
       </Canvas.Background> 
      </Canvas> 
     </Grid> 
    </Canvas> 
</StackPanel> 

如果它改變其他控件的其他佈局需求,則此解決方法可能會出現問題。