在wpf中单击适合屏幕按钮时,动态画布内容适合c#中的画布

时间:2012-07-02 10:39:44

标签: wpf wpf-controls screen

我有一张位于scrollviewer的画布。此画布是一个动态画布,可以在其上删除许多其他控件。拖动控件时将显示滚动查看器。从画布区域中删除,即右侧和底部。

我已经实现了用于放大和缩小画布的代码,该代码工作正常,但未能找到实现将动态画布内容拟合到实际画布大小的代码。

我正在寻找能够自动调整画布内容大小的内容,即计算缩放比例以使内容适合画布大小。

2 个答案:

答案 0 :(得分: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上有几篇文章,并在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; 

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