2017-04-17 66 views
0

我想放大圖像的畫布控制保持畫布的中心作爲原點。最初我嘗試使用Render變換它的效果很好,但滾動條沒有出現在zoom.I後顯示關於它,並發現佈局轉換應該用於這個目的。我的問題是我現在變焦後的滾動條,但縮放原點位於畫布的左上角,我怎樣才能將它設置爲中心。放大圖像中心作爲原點與佈局變換

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
     <Canvas x:Name="grdMain" RenderTransformOrigin="0.5,0.5"> 

      <Image Source="{Binding BmpImageSource,UpdateSourceTrigger=PropertyChanged}" x:Name="TargetImage" > 
      </Image> 



      <!-- <Canvas.RenderTransform> 
       <TransformGroup> 
        <ScaleTransform ScaleX="{Binding ScaleFactor}" ScaleY="{Binding ScaleFactor}" /> 
       </TransformGroup> 
      </Canvas.RenderTransform>--> 
      <Canvas.LayoutTransform> 
       <TransformGroup> 
        <ScaleTransform ScaleX="{Binding ScaleFactor}" ScaleY="{Binding ScaleFactor}" /> 
       </TransformGroup> 
      </Canvas.LayoutTransform> 



     </Canvas> 
    </ScrollViewer> 

一些建議說要設置的centerX和centerY的佈局轉換,但我的應用程序的大小是動態的,我可能不是固定的中心點。

<ScaleTransform ScaleX="{Binding ScaleFactor}" ScaleY="{Binding ScaleFactor}" 
     CenterX="250" CenterY="250"/> 

回答

0

一些建議說要設置的centerX和centerY的佈局轉換,但我的應用程序的大小是動態的,我可能不是固定的中心點。

然後,您需要動態計算CenterXCenterY屬性的值。使用LayoutTransform時,您應該使用這些屬性來縮放控制中心。

例如,您可以處理Loaded事件Canvas的編程應用LayoutTransform

<Canvas x:Name="grdMain" Loaded="grdMain_Loaded">... 

private void grdMain_Loaded(object sender, RoutedEventArgs e) 
{ 
    Canvas canvas = sender as Canvas; 
    ScaleTransform st = new ScaleTransform(); 
    BindingOperations.SetBinding(st, ScaleTransform.ScaleXProperty, new Binding("ScaleFactor")); 
    BindingOperations.SetBinding(st, ScaleTransform.ScaleYProperty, new Binding("ScaleFactor")); 
    st.CenterX = canvas.ActualWidth/2; 
    st.CenterY = canvas.ActualHeight/2; 
    canvas.LayoutTransform = st; 
}