2012-04-09 3 views
2

は、私はこの方法を使用する例のために作成したDrawingVisualオブジェクトがあります。取得の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ではmethodとそのプロパティによって描かれた形状の種類を取得する方法はありますか?

すなわち:

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プロパティを取得するために使用したいです。

ありがとうございました。

答えて

3

あなたはrecursivlyのDrawingVisualのDrawingプロパティによって提供さDrawingGroupDrawingオブジェクトを反復処理し、子供の描画が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); 
     } 
    } 
} 

あなたはジオメトリのタイプを取得してより特殊なプロパティをチェックできるようになりました。たとえば、RectangleGeometryの場合は、Rectプロパティをチェックします。

+0

これをVBに翻訳できましたか? – Clemens

+0

はい、私は全く問題ありません。今まではDrawingVisualから継承したクラスを使用し、必要なプロパティを追加しました。今日私はあなたの答えを試し、私はあなたに私の応答を与えます。 – gliderkite