在答案中转换评论:据我所知,FrameworkElement.Loaded
每次滚动列表时都会触发该事件。例如 - ListBox
。我尝试应用动画来加载新元素ListBox
,但每次滚动时都会触发该事件。一切都是这样,因为:
但默认设置ScrollViewer.CanContentScroll
为true
,这意味着当您滚动浏览每个项目时都是新创建的。这样做是为了改善大型列表大量元素的加载。如果设置为false
,则一旦所有元素都加载到内存中,如果元素很多,则会影响性能。并且该事件FrameworkElement.Loaded
只会触发一次(至少应该是,对 small 的测试ListBox
)。
从好的来源引用关于CanContentScroll
:
ScrollViewer 当前允许两种滚动模式:平滑逐像素滚动 (CanContentScroll = false) 或离散逐项滚动 (CanContentScroll = true)。目前 WPF 仅在按项目滚动时支持 UI 虚拟化。基于像素的滚动也称为“物理滚动”,基于项目的滚动也称为“逻辑滚动”。
即使在 property 的情况下Visibility
,也就是:
Visibility.Collapsed -> Visibility.Visible
该事件FrameworkElement.Loaded
仅在第一次转换可见性时调用一次。如果您稍后更改可见性属性,该事件将不会触发。
我想,这个事件应该用于只渲染一次的静态控件,比如程序启动的时候。