我有一個面板,我想要擴展並覆蓋MeassureOverride並安排我的自定義佈局。 基本上,面板將包含一些標籤。由於標籤有一些文字內容,因此應該有特定的尺寸。但是,當我在MeassureOverride或ArrangeOverride中使用label.ActualHeight或實際寬度,desiredSize ...時,都會導致NaN。有沒有什麼辦法可以獲得所需的標籤尺寸,以便文本內容適合?標籤大小始終是NaN?
回答
是否在每個方法的末尾調用base.MeasureOverride(abailableSize)和base.ArrangeOverride(finalSize)?
Here是創建自定義面板
的一個例子的MeasureOverride的自定義實現可能是這樣的(從後):
protected override Size MeasureOverride(Size availableSize)
{
Size sizeSoFar = new Size(0, 0);
double maxWidth = 0.0;
foreach (UIElement child in Children)
{
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
if (sizeSoFar.Width + child.DesiredSize.Width > availableSize.Width)
{
sizeSoFar.Height += child.DesiredSize.Height;
sizeSoFar.Width = 0;
}
else
{
sizeSoFar.Width += child.DesiredSize.Width;
maxWidth = Math.Max(sizeSoFar.Width, maxWidth);
}
}
return new Size(maxWidth, sizeSoFar.Height);
}
ArrangeOverride的自定義實現可能是這樣的(從該帖子):
protected override Size ArrangeOverride(Size finalSize)
{
Size sizeSoFar = new Size(0, 0);
foreach (UIElement child in Children)
{
child.Arrange(new Rect(sizeSoFar.Width, sizeSoFar.Height,
child.DesiredSize.Width, child.DesiredSize.Height));
if (sizeSoFar.Width + child.DesiredSize.Width >= finalSize.Width)
{
sizeSoFar.Height += child.DesiredSize.Height;
sizeSoFar.Width = 0;
}
else
{
sizeSoFar.Width += child.DesiredSize.Width;
}
}
return finalSize;
}
如果你想強制面板渲染(調用MeasureOverride函數),使用InvalidateMeasure功能
您還可以在msdn上檢出Custom Panel Elements。
嗨DevMan,謝謝你的回答。我沒有使用基本方法。我的DesiredSize是NaN,是因爲Panel包含在一個Grid中,我把它的Size設置爲Auto? (但是,我也設置了MinHeight,MinWidth屬性以及) – 2010-05-28 14:10:03
嗨,我試過這個,它工作 – 2010-06-07 01:24:53
每個孩子的DesiredSize
只有在您測量後纔會設置。在您的MeasureOverride
中,您必須撥打child.Measure()
爲您的每個小組的孩子。 ArrangeOverride
中的child.Arrange()
也是如此。
見http://msdn.microsoft.com/en-us/library/ms745058.aspx#LayoutSystem_Measure_Arrange
編輯迴應您的評論:只是通過您的標籤可能具有的最大尺寸(可用大小),或限制大小,如果你需要。如果對齊與拉伸不同,則曾經測量的標籤將使用其最小尺寸作爲DesiredSize
。
嗨Julien。謝謝你的幫助。據我所知,MeasureOverride方法是讓子元素告訴它父級需要多少空間。 但是,如果我在測量之前無法獲得其DesiredSize,我怎麼能知道面板需要適應其文本內容的高度? 換句話說,如果不是標籤的DesiredSize,我應該在每個度量中返回什麼? – 2010-05-28 14:14:22
- 1. Javas Math.sin()始終產生NaN
- 2. Vb.Net標籤始終居中
- 3. 保持TextInputLayout始終專注或始終展開標籤
- 4. 數組大小/ 2始終未定義
- 5. std ::地圖大小始終爲1
- 6. Electron + NodeJs:fs.statSync()文件大小始終爲0
- 7. UIButton的幀大小始終爲零
- 8. JTable始終使用固定大小
- 9. std :: index_sequence返回大小始終爲1
- 10. 數組大小始終爲10
- 11. Android - Arraylist大小始終爲零
- 12. 烏里文件大小始終爲0
- 13. scrollView界限大小始終爲零
- 14. MediaRecorder.ondataavailable - 數據大小始終爲0
- 15. 檢查窗口大小始終(jQuery)
- 16. 我的值始終顯示爲NaN
- 17. Python - 位變量的大小始終爲24,而不是其大小
- 18. FileInfo.Length始終顯示文件總大小,而不是實際當前大小
- 19. NaN大小的網格
- 20. UICollectionReusableView內部的標籤始終爲零
- 21. Spring Security授權標籤始終爲假
- 22. 哪些PHP標籤始終可用?
- 23. 發件人標籤始終返回1
- 24. Facebook頁面標籤始終顯示
- 25. 標籤的複選框始終爲零
- 26. 使puttext標籤始終顯示
- 27. Vaadin TabSheet標籤大小
- 28. 增加標籤大小?
- 29. c#RichTextBox標籤大小
- 30. AutoFit標籤字體大小
你可以發佈你到目前爲止? – DevDemon 2010-05-28 12:19:40