我有一张位于scrollviewer
的画布。此画布是一个动态画布,可以在其上删除许多其他控件。拖动控件时将显示滚动查看器。从画布区域中删除,即右侧和底部。
我已经实现了用于放大和缩小画布的代码,该代码工作正常,但未能找到实现将动态画布内容拟合到实际画布大小的代码。
我正在寻找能够自动调整画布内容大小的内容,即计算缩放比例以使内容适合画布大小。
答案 0 :(得分:2)
这是一个复杂的问题。 您应该使用ScrollViewer的某些属性来获得所需的结果: ContentHorizontalOffset,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上有几篇文章,并在google上查看可以帮助您使用ScrollViewer缩放。 虽然大多数都很复杂。希望这对你有所帮助。
答案 1 :(得分:0)
这是我的xaml代码:
并点击按钮,我想相应缩放。我尝试过以下代码。
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;
结果也一样。 如果代码不正确,请更正代码。