2012-07-02 52 views
1

我有一个画布在scrollviewer。这个画布是一个动态画布,可以在其上放置许多其他控件。滚动查看器将在拖动控件时显示&从画布区域中退出,即右侧和底部。动态画布内容适合在c#中的画布上点击适合屏幕按钮wpf

我已经实现了放大和缩小画布的代码,该画布可以很好地工作,但未能找到代码来实现适合实际画布大小的动态画布内容。

我正在寻找一些东西来自动将画布内容适合其大小,即计算缩放比例以适合画布大小。

回答

2

这是一个复杂的。 你应该与ScrollViewer中的一些性质工作,得到期望的结果:ContentHorizo​​ntalOffset,ContentVerticalOffset,ViewportWidth,ViewportHeight(其中包括现有的组件。)

这里的代码,帮助我的一个片段:

 Point realSize = new Point(this.canvasAreas.ActualHeight, this.canvasAreas.ActualWidth); 
     Point sizeAvailable = new Point(this.scroolMain.ActualHeight, this.scroolMain.ActualWidth); 

     double scaleX = sizeAvailable.X/realSize.X; 
     double scaleY = sizeAvailable.Y/realSize.Y; 

     double newScale = Math.Round(Math.Min(scaleX, scaleY), 2); 

     this.gridScaleZoom.ScaleX = newScale; 
     this.gridScaleZoom.ScaleY = newScale; 

在CodeProject上有几篇文章,并在谷歌上看,可以帮助您使用ScrollViewer缩放。 虽然大多数是复杂和复杂的。希望这可以帮助你一点。

+0

感谢您的帮助。 – user1495759

+0

我已经试过这段代码,它在每次点击fittoscreen按钮时都会应用比例尺。实际上,它应该适合屏幕,但执行的点击次数很多,相反,由于每次都会应用缩放比例,因此画布上的控件正变得越来越小。我尝试了很多文章,但是我没有找到找到动态缩放因子的解决方案帆布。 – user1495759

+0

我的代码,如果使用得当,将会得到缩放比例X和Y的结果,以显示没有滚动的所有组件(fittoscreen)。我无法理解你的问题,你可以发布一些代码片段或更好地解释? –

0

这里是我的XAML代码:

和按钮点击我想扩展accordingly.I曾尝试下面的代码。

  Point realSize = new Point(this.formCanvas.ActualHeight, this.formCanvas.ActualWidth); 
     Point sizeAvailable = new Point(this.myScrollViewer.ActualHeight, this.myScrollViewer.ActualWidth); 

     double scaleX = sizeAvailable.X/realSize.X; 
     double scaleY = sizeAvailable.Y/realSize.Y; 

     double newScale = Math.Round(Math.Min(scaleX, scaleY), 2); 

     this.canvasScale.ScaleX = newScale; 
     this.canvasScale.ScaleY = newScale; 

结果也一样。 如果不正确,请更正代码。

+0

我已经尝试过上面的代码。但问题是我想显示画布以适应屏幕上有多少点击,如果我执行。如果画布加载的是尽可能多的它应该根据比例缩小或增大画布。如果它不正确,请更正我的代码。 – user1495759