【发布时间】:2014-01-08 17:02:39
【问题描述】:
我无法理解何时调用 OnRender 方法。
考虑我的例子:
我有一个派生自 FrameworkElement 的类 SomeElement ,它覆盖了 OnRender 方法。
假设我有一个Grid grid。我所期望的是
var someElement = new SomeElement();
grid.AddVisualChild(someElement);
someElement.InvalidateVisual();
将导致触发 SomeElement.OnRender 方法。在我的情况下不是这样,但以下是:
var someElement = new SomeElement();
grid.Children.Add(new SomeElement());
someElement.InvalidateVisual();
所以我的问题是为什么 someElement 在单独添加到可视化树时不被绘制。将其添加到属性Children 有什么重要性?
更一般地说,如何调用 OnRender?通过可视化树,或Children 属性,还是?
【问题讨论】:
-
你想做什么?覆盖
OnRender()不是您在 WPF 中经常要做的事情。 -
尽管很难在 Grid 实例上调用受保护的 AddVisualChild 方法。
-
@HighCore:我正在尝试在网格顶部画几条线。我想我会把它们放在一个专门绘制这些线条的元素中。顺便说一句,我是 WPF 新手,您可能会注意到...
-
@JBSnorro 您可能希望使用适当的 WPF 模式和实践在 WPF 中查看 My Example 这样的事情。