【问题标题】:Are there any events triggered when any / all the elements of an ItemsControl have been added to the VisualTree?将 ItemsControl 的任何/所有元素添加到 VisualTree 时是否触发了任何事件?
【发布时间】:2013-04-17 09:49:31
【问题描述】:

FrameworkElement.Loaded 在容器被添加到树时发生。

我需要根据添加到ItemsControl 的所有数据绑定项的测量值进行一些自定义滚动。

我可以连接到像LayoutUpdated 这样的事件,然后追踪后代,计算孩子的数量,但这是相当繁重的工作。

当 ItemsControl 的任何/所有数据绑定元素已添加到 VisualTree 时,是否会触发任何事件?

【问题讨论】:

    标签: events windows-runtime winrt-xaml


    【解决方案1】:

    您可以将 ItemsControl 子类化以获得获取项目的最佳性能:

    public class CustomListView : ListView
    {
        protected override DependencyObject GetContainerForItemOverride()
        {
            var listViewItem = base.GetContainerForItemOverride();
    
            // process the ListViewItem
    
            return listViewItem;
        }
    }
    

    【讨论】:

    • 有用的信息,但不幸的是不是我遇到的问题的答案。
    • 假设ItemsControl 是ListView。如果它只是一个ItemsControl - 您可以在我的代码中将 ListView 替换为 ItemsControl 并将 listViewItem 替换为 contentPresenter。当您知道返回的容器数量是您期望加载的数量时 - 这就是您将所有元素添加到树中的时间。请记住,如果 ItemsPanel 是一个虚拟化面板 - 通常并非所有项目实际上都会同时加载。没有一个可靠的事件可以知道它们都被添加了。
    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多