我有一个“托管”在自定义面板(都是我的)中的自定义控件。
我的自定义面板有这样的代码:
protected override Size MeasureOverride(Size availableSize)
{
foreach (UIElement child in Children)
{
child.Measure(availableSize);
// Do stuff with the Desired Size. (This is an example)
resultSize.Width += child.DesiredSize.Width;
resultSize.Height = Math.Max(resultSize.Height, child.DesiredSize.Height);
}
//.. Other Measure Stuff
}
我放在面板中的所有标准控件都可以正常工作。但我的自定义控件已DesiredSize
设置为非常小的宽度(5 像素)。即使它上面有一个Label
至少需要 40 个像素才能显示的内容。
所以我把这段代码放到我的自定义控件中:
protected override Size MeasureOverride(Size constraint)
{
var baseSize = base.MeasureOverride(constraint);
var labelTextWidth = GetStringWidth(label.Content.ToString(), label);
if (baseSize.Width == 0)
baseSize.Width = 100;
if (baseSize.Width < labelTextWidth)
baseSize.Width = labelTextWidth;
return baseSize;
}
这将返回一个Size
正确的。但是在我的面板的 MeasureOverride 中,child.DesiredSize 并没有反映我从子控件的 MeasureOverride 返回的内容。
任何想法为什么会这样做?我能做些什么来让它在 DesiredSize 中正确地将我计算的 Measure 传递给面板? (您不能只设置 DesiredSize。)