在我的wpf应用程序中,我绘制了很多几何图形,如下所示。我的要求是改变drawingvisual的颜色而不重绘它? wpf的任何可能性?
using (DrawingContext vDrawingContext = vDrawingVisual.RenderOpen())
{
StreamGeometry vGeom = GetCutGeometry(mLength, mWidth);
vDrawingContext.DrawGeometry(mBackGroundBrush, ForeGroundPen, vGeom);
vDrawingContext.Close();
VisualChildren.Add(vDrawingVisual);
}
怎么可能是mBackGroundBrush动态的颜色?
答案 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();
}
}