У меня есть настраиваемый элемент управления, который размещается на пользовательской панели (и моей).WPF MeasureOverride не работает для моего пользовательского элемента управления
Мой заказ панель имеет такой код:
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? (вы не можете просто установить DesiredSize.)
Пожалуйста, разместите шаблон своего пользовательского элемента управления, а также то, что вы получаете в качестве доступного размера в переносе вашей панели. – AndrewS
@AndrewS - шаблон моей пользовательской панели слишком большой, чтобы публиковать здесь (255 строк). Я загрузил его как сущность: https://gist.github.com/Vaccano/5173613. availableSize - {510, Infinity} – Vaccano