C# 是否有一个“问题”;“所有儿童均已加载”;WPF中的事件
我正在侦听页面的已加载事件。该事件首先激发,然后所有子事件激发其加载事件。我需要一个事件,当所有的孩子都加载后激发。是否存在?C# 是否有一个“问题”;“所有儿童均已加载”;WPF中的事件,c#,.net,wpf,C#,.net,Wpf,我正在侦听页面的已加载事件。该事件首先激发,然后所有子事件激发其加载事件。我需要一个事件,当所有的孩子都加载后激发。是否存在?已加载是在初始化所有子项后激发的事件。据我所知,没有AfterLoad事件。如果可以,将子逻辑移动到Initialized事件,然后在所有子逻辑都初始化后将发生Loaded 请参阅。WPF无法提供此类事件,因为大多数时间数据都在确定是否将特定子级加载到VisualTree(例如数据模板中的UI元素) 因此,如果您能更清楚地解释一下您的场景,我们可以找到一个特定于此的解决方
已加载
是在初始化所有子项后激发的事件。据我所知,没有AfterLoad
事件。如果可以,将子逻辑移动到Initialized
事件,然后在所有子逻辑都初始化后将发生Loaded
请参阅。WPF无法提供此类事件,因为大多数时间数据都在确定是否将特定子级加载到VisualTree(例如数据模板中的UI元素)
因此,如果您能更清楚地解释一下您的场景,我们可以找到一个特定于此的解决方案。我最终按照这些思路做了一些事情。。你的国籍可能不同
void WaitForTheKids(Action OnLoaded)
{
// After your children have been added just wait for the Loaded
// event to fire for all of them, then call the OnLoaded delegate
foreach (ContentControl child in Canvas.Children)
{
child.Tag = OnLoaded; // Called after children have loaded
child.Loaded += new RoutedEventHandler(child_Loaded);
}
}
internal void child_Loaded(object sender, RoutedEventArgs e)
{
var cc = sender as ContentControl;
cc.Loaded -= new RoutedEventHandler(child_Loaded);
foreach (ContentControl ctl in Canvas.Children)
{
if (!ctl.IsLoaded)
{
return;
}
}
((Action)cc.Tag)();
}
我也有同样的问题@configurator是正确的,如果您有这个问题,那么我相信这是因为您的子元素有问题。在我的例子中,子元素包含一个自定义用户控件。我错误地初始化了它们。我修复了用户控件,一切都很好您还可以使用event:ContentRendered
我听到了。我还缺少WPF中的开箱即用解决方案 有时,您希望在加载所有子控件后执行一些代码 将其放入父控件的构造函数中
Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(() => {code that should be executed after all children are loaded} ));
到目前为止,曾帮助过我几次。选项之一(内容呈现时):
this.LayoutUpdated+=OnLayoutUpdated
private void OnLayoutUpdated(object sender, EventArgs e)
{
if (!isInitialized && this.ActualWidth != 0 && this.ActualHeight != 0)
{
isInitialized = true;
// Logic here
}
};
如果一个答案不正确,怎么可能有7票?Buckly的答案只有两张赞成票,效果很好。@FrederikPrijck仅仅因为一个答案正确并不意味着另一个答案不正确。这个答案是正确的、有用的,并且正是我所需要的——我在孩子的加载处理程序中做了一些事情,而不是在它的初始化处理程序中应该做的事情。事实上,Buckley的答案是“在WPF中缺少一个现成的解决方案”,这与这个答案是一致的。看看Jobi的答案,这表明在某些情况下Buckey的破解是不够的。我在哪里说只有一个答案是正确的?这个答案对我来说不起作用,但这完全不同于只留下一个答案是正确的。但是已经有一段时间了,所以我不知道细节。@FrederikPrijck,因为你和投你票的5个人是不正确的?如果父对象需要获得子对象的精确渲染大小,则此操作不起作用。此操作非常有效。谢谢