How to: Enumerate Drawing Content of a Visual

 

The Drawing object provide an object model for enumerating the contents of a Visual.

The following example uses the GetDrawing method to retrieve the DrawingGroup value of a Visual and enumerate it.

System_CAPS_ICON_note.jpg Note

When you are enumerating the contents of the visual, you are retrieving Drawing objects, and not the underlying representation of the render data as a vector graphics instruction list. For more information, see WPF Graphics Rendering Overview.

        public void RetrieveDrawing(Visual v)
        {
            DrawingGroup dGroup = VisualTreeHelper.GetDrawing(v);
            EnumDrawingGroup(dGroup);

        }

         // Enumerate the drawings in the DrawingGroup.
         public void EnumDrawingGroup(DrawingGroup drawingGroup)
         {
             DrawingCollection dc = drawingGroup.Children;

             // Enumerate the drawings in the DrawingCollection.
             foreach (Drawing drawing in dc)
             {
                 // If the drawing is a DrawingGroup, call the function recursively.
                 if (drawing.GetType() == typeof(DrawingGroup))
                 {
                     EnumDrawingGroup((DrawingGroup)drawing);
                 }
                 else if (drawing.GetType() == typeof(GeometryDrawing))
                 {
                     // Perform action based on drawing type.  
                 }
                 else if (drawing.GetType() == typeof(ImageDrawing))
                 {
                     // Perform action based on drawing type.
                 }
                 else if (drawing.GetType() == typeof(GlyphRunDrawing))
                 {
                     // Perform action based on drawing type.
                 }
                 else if (drawing.GetType() == typeof(VideoDrawing))
                 {
                     // Perform action based on drawing type.
                 }
             }
         }

Drawing
DrawingGroup
VisualTreeHelper
Drawing Objects Overview
WPF Graphics Rendering Overview

Show: