有一個屬性「AffectsParentArrange」會隱式地無效父級的佈局 - 但我想將事件處理程序附加到由該屬性觸發的「事件」。如何在您不是父母時監聽AffectsParentArrange事件
當屬性發生變化時,父母的安排將失效。
我有一個需要接收事件的自定義控件(它不是直接父對象)。
有沒有人知道可以在這裏使用的事件?
我是否需要提供覆蓋方法並觸發事件的自定義父級?
有一個屬性「AffectsParentArrange」會隱式地無效父級的佈局 - 但我想將事件處理程序附加到由該屬性觸發的「事件」。如何在您不是父母時監聽AffectsParentArrange事件
當屬性發生變化時,父母的安排將失效。
我有一個需要接收事件的自定義控件(它不是直接父對象)。
有沒有人知道可以在這裏使用的事件?
我是否需要提供覆蓋方法並觸發事件的自定義父級?
當屬性發生變化時,它僅對母公司調用InvalidateArrange()
。這會導致WPF稍後在父級上調用Arrange()
。這些調用都沒有任何方法來攔截它(不使用真的偷偷摸摸的技術,例如修補IL代碼或將調試器附加到進程中)。
這意味着,寫託管代碼能夠檢測InvalidateArrange()
的唯一方法是創建覆蓋ArrangeOverride
方法定製父母,或挖掘到所討論的特定的控制的Arrange
方法的一些行爲 - 例如,如果父母是Panel
,您可以添加一個額外的不可見孩子,以便從其父母接收Arrange()
調用。
更新當你得到你所不能檢測出排列()回調爲什麼InvalidateArrange()被調用父,但你可以檢測通過保存的舊值與AffectsParentArrange
標誌的屬性是否有變化每Arrange
呼叫中的財產並將其與先前保存的值進行比較。這可以通過使用循環,詞典以及屬性列表或致電GetLocalValueEnumerator()
擴展到多個屬性。
問題在於ArrangeOverride無法區分自上而下和自下而上。每當從任何來源無效的安排發送一個事件。不幸的是,我的事件處理程序的一個副作用是導致控件重新排列。 – 2009-11-13 14:53:09
沒問題。我已經將解決方案添加到了我的答案中。 – 2009-11-13 17:03:41