1

次のようなDrawingVisualがあります。

Rect MyRect = new Rect(new Point(0, 0), new Size(100, 100));
DrawingVisual MyVisual = new DrawingVisual();

using (DrawingContext context = MyVisual.RenderOpen()) {
context.DrawRectangle(Brushes.Black, new Pen(), MyRect);
context.PushTransform(new TranslateTransform(50, 50));
context.PushTransform(new ScaleTransform(2, 2));
}

要素の領域を表すGeometryを取得したいのですが、この場合は Rect プロパティが次のRectangleGeometryです。

Rect(new Point(50, 50), new Size(200, 200))

ありがとう。

4

1 に答える 1

3

Rectを描画する前に変換をプッシュする場合は、ContentBoundsプロパティによって適切な境界を取得できます。

Rect rect = new Rect(new Size(100, 100));

using (DrawingContext dc = visual.RenderOpen())
{
    dc.PushTransform(new TranslateTransform(50, 50));
    dc.PushTransform(new ScaleTransform(2, 2));
    dc.DrawRectangle(Brushes.Black, null, rect);
}

System.Diagnostics.Trace.TraceInformation("Bounds = {0}", visual.ContentBounds);

PushTransformの備考セクションから:

変換は、ポップコマンドによって削除されるまで、後続のすべての描画コマンドに適用されます。

于 2012-05-04T05:09:18.060 に答える