【问题标题】:Get DrawingVisual properties获取 DrawingVisual 属性
【发布时间】:2012-04-09 22:44:14
【问题描述】:

我有一个 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 属性。

谢谢。

【问题讨论】:

    标签: .net wpf drawing drawingcontext


    【解决方案1】:

    您可以递归遍历 DrawingVisual 的 Drawing 属性提供的 DrawingGroup 中的 Drawing 对象,如果子绘图是 GeometryDrawing,请检查其 PenBrush 和 @987654326 @属性:

    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 属性。

    【讨论】:

    • 你能把它翻译成VB吗?
    • 是的,我完全没有问题。到目前为止,我使用了一个继承自 DrawingVisual 的类,并添加了我需要的属性。今天我会试试你的答案,我会给你我的回应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多