2

たとえば、このメソッドを使用して作成したDrawingVisualオブジェクトがあります。

Private Function CreateDrawingVisualRectangle() As DrawingVisual

   Dim drawingVisual As New DrawingVisual() 
   Dim drawingContext As DrawingContext = drawingVisual.RenderOpen()
   Dim rect As New Rect(New Point(160, 100), New Size(320, 80))
   drawingContext.DrawRectangle(Brushes.LightBlue, New Pen(Brushes.Black, 0.5), rect)

   Return drawingVisual

End Function

DrawingContextメソッドとそのプロパティによって描画される図形の種類を取得する方法はありますか?

すなわち:

Dim MyVisual as DrawingVisual = CreateDrawingVisualRectangle()

Dim MyVisualType as MyType = MyVisual.GetDrawingType()
Dim MyBrush as Brush = MyVisual.GetDrawingBrush()
Dim MyPen as Pen = MyVisual.GetDrawingPen()
Dim MyRect as Rect = MyVisual.GetDrawingRect()
...

明らかに、最後の例で使用したメソッドは、実際には存在しない指標的なメソッドですが、MyVisual プロパティを取得するために使用します。

ありがとう。

4

1 に答える 1

3

DrawingVisual のDrawingプロパティによって提供されるDrawingGroup内のDrawingオブジェクトを再帰的に反復処理し、子の描画が GeometryDrawing の場合は、その と プロパティを確認します。PenBrushGeometry

void InspectDrawings(DrawingVisual drawingVisual)
{
    InspectDrawings(drawingVisual.Drawing);
}

void InspectDrawings(DrawingGroup drawingGroup)
{
    foreach (Drawing drawing in drawingGroup.Children)
    {
        if (drawing is GeometryDrawing)
        {
            GeometryDrawing geometryDrawing = (GeometryDrawing)drawing;
            // inspect properties here
        }
        else if (drawing is DrawingGroup)
        {
            // recurse into sub-group
            InspectDrawings((DrawingGroup)drawing);
        }
    }
}

Geometry のタイプを取得し、より特別なプロパティをチェックできるようになりました。たとえば、RectangleGeometry の場合は、そのRectプロパティを確認します。

于 2012-04-10T08:33:57.430 に答える