2010-03-11 75 views
2
protected override Size MeasureOverride(Size availableSize) 
    { 

     foreach (UIElement child in Children) 
     { 
      child.Measure(availableSize); 
      //you get the desired size after 

     } 


    } 

所以爲了簡潔起見,我簡化了代碼,但是我無法理解爲什麼在某些示例中,在獲取DesiredHeight,DesiredWidth屬性後,它們將可傳遞給孩子的可用尺寸傳遞給孩子。 Measure實際上衡量什麼,爲什麼我甚至必須通過任何東西?我讀過msdn,並做了一些例子,但仍然不理解,或者我認爲這太多了。有人可以解釋什麼Child.Measure(availableSize)在Silverlight中做?

回答

1

控件在WPF中作爲樹結構佈局(VisualTree)。 '面板'是一種可以容納許多子UIElements的控件,換句話說,面板用作WPF/Silverlight中的LayoutSystem。給定面板的框架是StackPanel,Grid,Canvas等。如果你從Panel派生一個類並覆蓋MeasureOverride()和ArrangeOverride(),你將能夠自定義面板。

現在好了問題的答案。在自定義面板或控件中,您可以調用child.Measure(availableSize)讓所有下一級別的孩子知道'available'的大小是'孩子'現在得到的。並給出一個機會來決定這些孩子的元素,以適應它。這就像我告訴我的孩子,這是我們得到的空間決定你的尺寸。所以一旦一個控件調用Measure()它將它傳遞給隨後的孩子,並且每個孩子都會調用它自己的measure()直到VisualTree的結束,並且一旦這個調用完成,你將能夠看到孩子想要的尺寸.DesiredSize。現在您已獲得所有孩子的期望大小,您可以計算控件的期望大小並返回到MeasureOverride()函數的末尾

佈局機制以雙通道測量和排列方式工作。一旦你用可用尺寸衡量你的孩子,你可以安排你的孩子,因爲在那個媽媽,你會知道每個孩子需要從孩子身上需要多大尺寸。設計尺寸

0

我從閱讀文檔中得出的猜測是,可用大小用於限制組成目標控件的底層控件的大小。這樣,如果可用尺寸很小,或者僅增長到最大尺寸(不管目標區域有多大),它們都可以摺疊。

如果您無法適應可用區域,在這種情況下也可能會出現「錯誤」,儘管可能會受到限制。

相關問題