我创建了一个自定义的FrameworkElement,并通过AddLogicalChild方法添加了多个孩子,它们也是FrameworkElements。
但是子对象不会被呈现,OnRender方法甚至不会被调用。就像MeasureOverride和ArrangeOverride方法一样。
我做了一些研究,但我被卡住了,也许有人能帮我。
下面是我创建的两个类。在ChildElement类中,我在每个方法中都设置了断点。但如果调用了除ctor之外的方法,则无。
public class HostElement : FrameworkElement
{
public HostElement()
{
ChildElement ce;
Int32 rows = 5;
Int32 cols = 5;
for (Int32 i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
ce = new ChildElement();
this.AddLogicalChild(ce);
}
}
}
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
drawingContext.DrawRectangle(Brushes.LightBlue, null, new Rect(0, 0, this.ActualWidth, this.ActualHeight));
}
}
public class ChildElement : FrameworkElement
{
public ChildElement()
{
}
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
}
protected override Size MeasureOverride(Size availableSize)
{
return base.MeasureOverride(availableSize);
}
protected override Size ArrangeOverride(Size finalSize)
{
return base.ArrangeOverride(finalSize);
}
}发布于 2015-07-29 06:18:26
逻辑树和可视化树之间存在差异。您想要这样做:
public class HostElement : Panel
{
public HostElement()
{
ChildElement ce;
Int32 rows = 5;
Int32 cols = 5;
for (Int32 i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
ce = new ChildElement();
this.Children.Add(ce);
}
}
}
// etc...
}https://stackoverflow.com/questions/31687881
复制相似问题