2013-03-15 2 views
3

У меня есть настраиваемый элемент управления, который размещается на пользовательской панели (и моей).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.)

+0

Пожалуйста, разместите шаблон своего пользовательского элемента управления, а также то, что вы получаете в качестве доступного размера в переносе вашей панели. – AndrewS

+0

@AndrewS - шаблон моей пользовательской панели слишком большой, чтобы публиковать здесь (255 строк). Я загрузил его как сущность: https://gist.github.com/Vaccano/5173613. availableSize - {510, Infinity} – Vaccano

ответ

0

Если MeasureOverride пользовательского элемента управления вернет правильный размер, но это не отражено в свойстве DesiredSize, у меня есть только одно предложение. Ваш дочерний элемент обернут некоторым контейнером, вы можете проверить тип дочернего элемента внутри процедуры MeasureOverride настраиваемой панели.

Смежные вопросы