WPF TreeView 移除绘制的线条 (ReDraw)
WPF TreeView Remove drawn lines (ReDraw)
因为普通的 TreeView 不符合我的需要,所以我创建了自己的 TreeView,继承自 TreeView 并在我的 TreeViewItems 之间画线。像这样
到目前为止一切顺利,但我想在构建和绘制树后重新绘制(删除添加的线条)。目前我在 OnRender 方法中完成所有操作,该方法已经提供了绘制线条的 DrawingContext。
//Point connections from the parent to the childs.
Point parentStart = parentCenter;
Point parentEnd = new Point(parentCenter.X, middleParentChild);
Point childEnd = new Point(childCenter.X, middleParentChild);
Point childStart = childCenter;
drawingContext.DrawLine(Pen, parentStart, parentEnd);
drawingContext.DrawLine(Pen, parentEnd, childEnd);
drawingContext.DrawLine(Pen, childEnd, childStart);
//recursivly do this for all children
DrawConnections(Pen, drawingContext, item);
但是在控件渲染一次后,我无法访问 DrawingContext。保存在一个 lokal 变量中,我无法删除已经绘制的形状,也无法重绘任何东西,因为 DrawingContext 已经被处理掉了。
您可以使用 YourTreeView.InvalidateVisual()
重新绘制您的树。
因为普通的 TreeView 不符合我的需要,所以我创建了自己的 TreeView,继承自 TreeView 并在我的 TreeViewItems 之间画线。像这样
到目前为止一切顺利,但我想在构建和绘制树后重新绘制(删除添加的线条)。目前我在 OnRender 方法中完成所有操作,该方法已经提供了绘制线条的 DrawingContext。
//Point connections from the parent to the childs.
Point parentStart = parentCenter;
Point parentEnd = new Point(parentCenter.X, middleParentChild);
Point childEnd = new Point(childCenter.X, middleParentChild);
Point childStart = childCenter;
drawingContext.DrawLine(Pen, parentStart, parentEnd);
drawingContext.DrawLine(Pen, parentEnd, childEnd);
drawingContext.DrawLine(Pen, childEnd, childStart);
//recursivly do this for all children
DrawConnections(Pen, drawingContext, item);
但是在控件渲染一次后,我无法访问 DrawingContext。保存在一个 lokal 变量中,我无法删除已经绘制的形状,也无法重绘任何东西,因为 DrawingContext 已经被处理掉了。
您可以使用 YourTreeView.InvalidateVisual()
重新绘制您的树。