Comments 13
Упс, вы скорее всего меня неверно поняли :) Я не критикую WPF Layout System, просто ввиду отсутствия в статье расшифровки этих 3 загадочных букв WPF мозг подкинул такую асоциацию… Да и созвучно както, WPF и WTF, если именно по буквах произносить…
Сказали бы пару слов об особенностях реализации и вызовов этих методов, особенно в случае с виртуальными стек-панелями. Это же самое интересное.
Вообще у меня есть мысль сделать вики-страничку на эту теме, поскольку хотелось бы иметь место для складывания полезной инфы. Вопрос только — где это можно сделать так, чтобы было доступно всем и удобно? У меня есть блог на вордпрессе, но боюсь, там не предусмотрена такого рода функциональность.
Если вы хотите привлечь экспертов — забудьте. Лучше напишите как сами понимаете — в комментарии придут люди и поправят, если нужно будет.
К сожалению, формат статьи не позволяет добавлять что-то или менять. Статья — это вид подачи информации «сразу» (все что смог написать — написал), потому что даже если я буду потом редактировать, то все равно уже навряд ли кому-то это будет интересно. В этом и проблема. А в вики участвуют все и обращаются к ней постоянно, поэтому актуальности вики-странички не теряют.
А есть ли отличие между Silverligth и WPF в этом плане?
— InvalidateMeasure и InvalidateArrange приводят к вызову OnRender самого элемента, для которого они вызываются, только если изменился размер прямоугольника элемента, т.е. не всегда.
— У кнопки нет текста, а есть Content. Это свойство не помечено как AffectsXXX, вместо этого оно
влияет на внешний вид через шаблон. Если присвоить этому свойству объект класса String, то по умолчанию будет сгенерирован визуальный элемент класса TextBlock. А вот уже его свойство Text помечено флагом AffectsMeasure | AffectsRender. При изменении этого свойства у TextBlock'а и у всех его родительских элементов, вплоть до окна, естественно, включая кнопку, сбрасывается флаг IsMeasureValid и планируется вызов пересчета лейаута. Если изменить контент кнопки так, что размер кнопки не изменится, то MeasureOverride/ArrangeOverride будут рекурсивно вызваны для всей ветки визуального дерева, начиная с окна, но только для элементов без флагов IsArrangeValid/IsMeasureValid, а OnRender будет вызван только для TextBlock'а
— У кнопки нет текста, а есть Content. Это свойство не помечено как AffectsXXX, вместо этого оно
влияет на внешний вид через шаблон. Если присвоить этому свойству объект класса String, то по умолчанию будет сгенерирован визуальный элемент класса TextBlock. А вот уже его свойство Text помечено флагом AffectsMeasure | AffectsRender. При изменении этого свойства у TextBlock'а и у всех его родительских элементов, вплоть до окна, естественно, включая кнопку, сбрасывается флаг IsMeasureValid и планируется вызов пересчета лейаута. Если изменить контент кнопки так, что размер кнопки не изменится, то MeasureOverride/ArrangeOverride будут рекурсивно вызваны для всей ветки визуального дерева, начиная с окна, но только для элементов без флагов IsArrangeValid/IsMeasureValid, а OnRender будет вызван только для TextBlock'а
Sign up to leave a comment.
WPF layout: Measure и Arrange