【发布时间】:2015-07-28 22:00:25
【问题描述】:
我创建了一个自定义 FrameworkElement 并通过 AddLogicalChild 方法添加了多个 Child,它们也是 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);
}
}
【问题讨论】:
-
尝试在 FrameworkElement 上调用 UpdateLayout
-
我们能看一些代码吗?尝试通过将代码减少到演示问题所需的最低限度来隔离问题。如果解决方案没有解决问题,请在此处发布简化的代码,我们将更快地为您提供帮助! :)
-
FrameworkElement的逻辑子代不属于可视化树。你想要一个UIElement并添加到Children集合中。 -
你为什么在 C# 中这样做?为什么不按预期在 XAML 中执行此操作?似乎它也会更直接。
标签: c# wpf frameworkelement