1

にあるキャンバスがありscrollviewerます。このキャンバスは、他の多くのコントロールをドロップできる動的キャンバスです。コントロールがキャンバス領域、つまり右と下からドラッグ アンド ドロップされると、スクロールビューアが表示されます。

正常に動作するキャンバスのズームインとズームアウトのコードを実装しましたが、動的なキャンバス コンテンツを実際のキャンバス サイズに合わせて実装するコードが見つかりませんでした。

キャンバスのコンテンツをそのサイズに自動的に合わせるものを探しています。つまり、キャンバスのサイズに合わせてズームスケールを計算します。

4

2 に答える 2

2

これは複雑なものです。目的の結果を得るには、ScrollViewer のいくつかのプロパティを操作する必要があります。

これが私を助けたコードのスニペットです:

        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 ズームの操作に役立つ Google での検索があります。ほとんどは複雑で複雑ですが。これが少し役立つことを願っています。

于 2012-07-03T16:55:10.330 に答える
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; 

これも同じ結果になります。コードが間違っている場合は修正してください。

于 2012-07-09T07:03:40.227 に答える