﻿/**********************************************************************************************************************************************************/
// 不同平台主事件调用顺序
// 
// WIN：
// ApplyTemplate(父子) -> MeasureOverride(父子) -> ArrangeOverride(父子) -> SizeChanged(父子) -> Loaded(父子)
// 
// Android：
// ApplyTemplate(子父) -> Loaded(父子) -> MeasureOverride(父子) -> ArrangeOverride(父子) -> SizeChanged(子父)
// 
// iOS：
// ApplyTemplate(子父) -> Loaded(子父) -> MeasureOverride(父子) -> SizeChanged(父子) -> ArrangeOverride(父子)
//
// wasm:
// ApplyTemplate(父子) -> Loaded(父子) -> MeasureOverride(父子) -> ArrangeOverride(父子) -> SizeChanged(子父)
//
// WIN的OnApplyTemplate时控件已在可视树上，可查询父元素；uno此时不在可视树上，只能在Loaded时查询父元素！！！
/***********************************************************************************************************************************************************/


/**********************************************************************************************************************************************************/
// uno中的Style
// 
// xaml自动生成代码时：控件对象在创建、设置属性后直接调用ApplyTemplate
// 代码创建控件对象时：在添加到可视树时才调用ApplyTemplate
// 设置Style时：直接调用ApplyTemplate，在构造方法中设置也一样，DefaultStyleKey则不同
//
// 因此控件不再可视树时无需指定 DefaultStyleKey 或 Style！如PhoneUI模式的Win, Pane, Tabs等
/***********************************************************************************************************************************************************/


/**********************************************************************************************************************************************************/
// uno中事件：
// 点击时触发 Tapped，长按触发 RightTapped，但只附加Tapped事件时长按也触发Tapped，两事件都附加时长按只触发RightTapped！！！
// 双击时触发 DoubleTapped，同时触发两次Tapped
// 长按并短距离移动时触发 Holding
/**********************************************************************************************************************************************************/


/**********************************************************************************************************************************************************/
// 在MeasureOverride中尽可能不增删Children元素，uno中每增删一个元素会重复一次MeasureOverride，严重时死循环！！！
// 采用虚拟行模式时，需要根据可视区大小确定生成的虚拟行行数，可视区大小在MeasureOverride时才能确定，故解决方法：
// 在Lv.MeasureOverride时准确获取可见区大小，若大小变化则重新生成虚拟行，添加虚拟行会造成多次MeasureOverride，未发现其他好方法！！！
// 若放在SizeChanged中生成虚拟行时uno会警告 requestLayout() improperly called by xxx: posting in next frame！！！
/**********************************************************************************************************************************************************/


/**********************************************************************************************************************************************************/
// 调用UpdateLayout的不同：
// WIN：UpdateLayout内部会依次 > MeasureOverride > ArrangeOverride > SizeChanged
// uno: UpdateLayout调用时未同步调用上述方法，内部异步测量布局，和InvalidateMeasure功能相似
/**********************************************************************************************************************************************************/
