首先,将FrameworkPropertyMetadataOptions和调用方法设置为UpdateLayout或InvalidateVisual 之间的区别是显而易见的.在后一种情况下,您可以在控制代码中调用这些方法,在前一种情况下,框架会调用适当的方法.
AffectsMeasure和之间的区别AffectsArrange只是一个导致调用UIElement.InvalidateMeasure("影响布局的度量传递")而另一个导致调用UIElement.InvalidateArrange("影响布局的布局传递").
从UIElement的备注中可以看出差异.测量:
首次实例化布局时,它始终在安排之前接收度量调用.但是,在第一次布局传递之后,它可以在没有测量的情况下接收编配呼叫; 当仅影响排列的属性发生更改(例如对齐)或父级接收不带度量的排列时,就会发生这种情况.Measure呼叫将自动使Arrange呼叫无效.
并从UIElement.InvalidateMeasure中的备注:
调用此方法也会在内部调用InvalidateArrange,无需连续调用InvalidateMeasure和InvalidateArrange
更新:有关UpdateLayout和InvalidateVisual之间的区别,请参阅UpdateLayout中的备注:
当你调用这个方法,用IsMeasureValid虚假或IsArrangeValid假元素将调用特定元素的MeasureCore和ArrangeCore方法,这迫使布局更新,所有计算尺寸将被验证.
如果布局未更改,或者布局的布局和测量状态均无效,则调用此方法无效.但是,如果布局在任何方面都无效,UpdateLayout调用将重做整个布局.因此,您应该避免在元素树中的每次增量和次要更改后调用UpdateLayout.布局系统将使用平衡性能和货币的算法以延迟方式执行元素布局,并使用加权策略将更改推迟到根,直到所有子元素都有效.如果您绝对需要更新大小和位置,并且只有在确定所有对您控制的属性的更改以及可能影响布局的更改完成后,才应调用UpdateLayout.
此方法在内部调用InvalidateArrange.
通常不会从应用程序代码中调用此方法.WPF框架级布局系统自己处理元素可视树中的更改,并且在必要时将调用此方法的等效方法.只有高级方案才需要调用此方法.一个这样的高级方案是,如果要为不在Freezable或FrameworkElement派生类上的依赖项属性创建PropertyChangedCallback,该类仍会在更改时影响布局.
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |