我不能保证这个问题足够相似以提供帮助,但我想因为我找不到自己的问题的好答案,所以我会在这里发布,因为这是相似的,我想出了如何解决我的问题。
我正在使用Canvas控件,并且在该画布上放置了复杂的 UI 元素,并将ItemsControl控件作为其 XAML UI 定义的一部分。ItemsControl已在其ItemTemplates中定义了DataTemplates集。
因此,我的对象的某些方面只有在更新可视化树后才会完全生成。这不是在处理画布时拖放和使用项目的问题,因为ItemContainerGenerator在我需要时已经生成了项目。但是,在可视化树绘制自身之前,在 Canvas 加载时尝试从数据库重新生成项目时,这是一个问题。
我发现解决这个问题的唯一真正方法是,一旦触发了画布的 LayoutUpdated 事件,就开始在画布上放置“辅助对象”(与ItemContainerGenerators制作的对象相关联的对象)。
public class DesignerCanvas : Canvas
{
public void LoadCanvasFromDB()
{
...
[loading items from the database, part one]
LayoutUpdated += DesignerCanvas_LayoutUpdated;
}
void DesignerCanvas_LayoutUpdated(object sender, EventArgs e)
{
LayoutUpdated -= DesignerCanvas_LayoutUpdated;
[loading items from the database which tie to UI elements from part one]