Здравствуйте, Mirimon, Вы писали:
M>Здравствуйте, Аноним, Вы писали:
А>>>>Так по факту никакой бесконечной высоты в данном случае нету, высота грида = высота формы- высота стекпанели которая строго задана. Мало ли что там приходит в measure, если уж ругаться то только когда фактическая высота устанавливается в бесконечность
M>>>Объясняю концепцию WPF — пришел межур, надо отрисоваться в том размере, который на межуре пришел, пришел новый, надо перерисоваться. Каким образом котнрол узнает, что на первый межур реагировать не надо, рисоваться не надо, а попозже придет второй, мне не ясно. Поэтому грид и начинает рисоваться на любом межуре, и если там бесконечность, он об этом сообщает. Можете написать мелким баг, что в вашей ситуации вообще приходит бесконечность, и что, по вашей логике, не должна, этот подход будет корректнее, чем обвинять грид, что он пытается рисоваться в том, что ему отдает панель.
А>>Во-первых почему то в вашей концепции WPF , 2 Measure, хотя в концепции Microsoft, есть Measure , есть Arrage, где Measure осущестствляет только опрос — какую высоту хочет занять контрол, а Arrange уже назначает ему высоту. Так что свое это предупреждение логичнее было бы вешать на Arrange, а не на Measure. А>>Грид дествительно ведеть себя неадекватно, так как по факту он не занимает бесконечную высоту, но при этом выдает сообщение о бесконечной высоте.
M>Нет никакой "нашей" концепции WPF, есть ваш пример, который вы привели, и есть эксперимент, о котором я вам писал выше, когда надо вместо грида вставить ваш контрол и посмотреть, что приходит на межуре. Если бы вы все-таки попробуете это сделать, то увидите, что в вашем примере контрол межурится дважды, и на первом межуре ему приходит бесконечная высота. Грид стрейчится по вертикали, а значит, если ему пришла бесконечная высота на межуре, то он создаст все строки и займет максимально возможное место. Во второй раз, в вашем случае, гриду приходит конечная высота, и он перерисовывается. В итоге вы видите грид конечной высоты, но важно не только видеть конечный результат, но и понимать, какими средствами он был получен.
Да важно в первую очередь вам понимать что Measure — это панель хочет узнать какой размер планирует занять ваш контрол, а не указывает размер для вашего контрола. И вешать на Measure проверку высоты контрола — глупо, собственно не удивительно что после этого контрол получает неадекватное поведение. Почитайте про Measure и Arrange.