UIElement.Arrange(Rect) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
定位子元素並決定 的大小。UIElement 父元素會從其 ArrangeCore(Rect) 實作(或 WPF 框架層級的對應物)呼叫此方法,形成遞迴版面版面更新。 此方法構成佈局更新的第二次處理。
public:
void Arrange(System::Windows::Rect finalRect);
public void Arrange(System.Windows.Rect finalRect);
member this.Arrange : System.Windows.Rect -> unit
Public Sub Arrange (finalRect As Rect)
參數
備註
對於WPF框架層級的元素衍生情境,Arrange 的行為不應該(也不能,除非你有影子效應)被更改。 相反地,你應該在你的類別中覆寫實作。ArrangeOverride 你的 ArrangeOverride 實作是由 Arrange 內部呼叫,作為預設 WPF 框架層級佈局操作的一部分。 你的 ArrangeCore 實作也應該呼叫 ArrangeOverride 每個子元素(如果它有子元素的話)。
對於WPF核心層級元素的衍生情境,Arrange 的行為不應(也無法改變,除非你有影子效應)。 相反地,你應該在你的類別中覆寫 ArrangeCore 。 你的 ArrangeCore 實作是由 Arrange 內部呼叫,作為預設 WPF 框架層級佈局操作的一部分。 然而,這假設你使用的是WPF框架層級的佈局及其佈局系統,而如果你是從 UIElement 基底類別衍生出WPF核心層級的元素,通常情況並非如此。 你的 ArrangeCore 實作也應該呼叫 Arrange 每個子元素(如果它有子元素的話)。 請注意,WPF核心層的情境暗示你沒有使用FrameworkElement衍生類別,因為FrameworkElement封存了ArrangeCore。
WPF框架層級佈局定位的計算Windows Presentation Foundation(WPF)包含一個Measure呼叫與一個Arrange呼叫。 在呼叫過程中 Measure ,佈局系統會利用提供的 Size 參數availableSize()來決定元素的大小需求。 通話過程中 Arrange ,佈局系統會最終確定元素邊界框的大小與位置。 如需詳細資訊,請參閱 版面配置。
availableSize 可以是從零到無限大的任意數。 待排版的元素透過參數回傳所需的Size最小availableSize值。
當一個佈局首次實例化時,它總是在 Measure 之前接收到一個呼叫。Arrange 然而,在第一次佈局傳遞後,它可能會收到 Arrange 一個沒有 的 Measure呼叫;這可能發生在只影響 Arrange 的屬性被更改(例如對齊)時,或父節點收到 Arrange 一個沒有 Measure。 通話 Measure 會自動使通話 Arrange 失效。
版面更新通常以非同步方式進行(時間由版面系統決定)。 元素可能不會立即反映影響元素大小的屬性變更(例如 Width)。
Note
使用此 UpdateLayout 方法可強制進行版面更新;但不建議呼叫此函式,因為通常不必要且可能導致效能不佳。 在許多可能需要呼叫 UpdateLayout 的情況下,layout 系統很可能已經在處理更新。 版面系統能以優化所有必要更新的方式處理版面變更,作為套件的一部分。
版面系統會保留兩個獨立的無效排版隊列,一個為 , Measure 一個為 Arrange。 版面佇列是根據視覺樹中元素的順序排序的。 樹狀結構較高的元素會位於佇列頂端,以避免因父節點反覆變更而產生重複的佈局。 重複的條目會自動從佇列中移除,若元素已有效,則會自動從佇列中移除。
更新版面時, Measure 先清空佇列,接 Arrange 著清空佇列。 Arrange如果佇列中有元素Measure,該佇列中將永遠不會被排列。