WPF绘图上下文

时间:2013-06-05 08:47:34

标签: c# wpf drawing brush pen

在我的wpf应用程序中,我绘制了很多几何图形,如下所示。我的要求是改变drawingvisual的颜色而不重绘它? wpf的任何可能性?

  using (DrawingContext vDrawingContext = vDrawingVisual.RenderOpen())
        {
          StreamGeometry vGeom = GetCutGeometry(mLength, mWidth);
          vDrawingContext.DrawGeometry(mBackGroundBrush, ForeGroundPen, vGeom);
          vDrawingContext.Close();
          VisualChildren.Add(vDrawingVisual);    

        }

怎么可能是mBackGroundBrush动态的颜色?

2 个答案:

答案 0 :(得分:3)

如果mBackGroundBrush是可修改的SolidColorBrush(即它是在您的应用程序中创建的,并且没有预定义的画笔),您只需更改其Color属性即可。这将通过重绘来更改每个绘制几何体的填充颜色。

private SolidColorBrush mBackGroundBrush = new SolidColorBrush(Colors.Black);

...

mBackGroundBrush.Color = Colors.Red;

mBackGroundBrush.Color = Color.FromArgb(255, 255, 0, 0);

答案 1 :(得分:1)

我做了一个如下的工作。似乎工作。

///Kept as arefrence while initial drawing phase.
private DrawingVisual mDrawingVisual = null;

 if (null != mDrawingVisual)
      {
        using (DrawingContext vDrawingContext = mDrawingVisual.RenderOpen())
        {
          DrawingGroup vDrawingGroup = VisualTreeHelper.GetDrawing(mDrawingVisual);
          if (null != vDrawingGroup)
          {
            foreach (Drawing vDrawing in vDrawingGroup.Children)
            {
              GeometryDrawing vGeometryDrawing = vDrawing as GeometryDrawing;
              if (null != vGeometryDrawing)
              {
                vGeometryDrawing.Brush = mBackGroundBrush;
              }
            }
          }

          vDrawingContext.DrawDrawing(vDrawingGroup);
          vDrawingContext.Close();
        }
      }