2013-12-24 4 views
1

Я написал панель, похожую на встроенную StackPanel. Я работаю почти отлично, за исключением небольшой проблемы:MeasureOverride не всегда вызывает изменения свойств детей

Изменение свойств макета для детей не всегда вызывает вызовы MeasureOverride панели и ArrangeOverride. Они : всегда вызываются при изменении свойства видимости ребенка, но не при изменении свойств Ширина и Высота.

Мне еще не удалось воспроизвести это поведение в примере, достаточно небольшом, чтобы быть включенным в вопрос о StackOverflow: Но поскольку он отлично работает в тривиальном образце, который я сделал, я знаю, что должен сделать что-то, что можно избежать в моей реальной панели.

Итак, мой вопрос: в каких обстоятельствах элемент, который не мешает его родителям измерять при изменении свойств, связанных с размером?

Я помечаю этот wpf также (я использовал Silverlight), чтобы иметь более широкую аудиторию - я подозреваю, что это применимо и к реализациям xaml одинаково.

ответ

0

Я понял, что моя ошибка была и при каких условиях MeasureOverride третейской группы больше не вызывается на определенные изменения для свойств размера связанных.

Моя панель под названием «Мера» для детей с точным размером, который должны иметь дети, а не размером с панелью.

Панель не получает метод MeasureOverride, называемый, когда дети начинают требовать больше места, чем было сказано им, доступно в последнем вызове Measure, что имеет смысл.

Реферат: Параметр метода Мера, который вы вызываете у ребенка, должен обозначать пространство, выделенное родительскими панелями, для всех детей, а не только одно из них.

-1

Вы должны убедиться, что вы вызываете базовые методы MeasureOverride.

protected override Size MeasureOverride(Size availableSize) 
    { 
     // you must call this 
     var throwaway = base.MeasureOverride(availableSize); 

     // your code here 

     return yourNewSize; 
    } 
+1

Это не имеет никакого эффекта: образец отлично работает без этого, и моя панель с реальным словом все еще не работает, когда я его вставляю. – John