0

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

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

        }

mBackGroundBrush 怎么可能是动态颜色?

4

2 回答 2

3

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

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

...

mBackGroundBrush.Color = Colors.Red;

或者

mBackGroundBrush.Color = Color.FromArgb(255, 255, 0, 0);
于 2013-06-05T10:31:23.487 回答
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();
        }
      }
于 2013-06-05T11:23:27.433 回答