Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Компоновка от родителя к потомку


Автор: aush 12.12.2012, 21:13
Я читал о том, как работает компоновка: родитель запрашивает желамый размер у детей и вычисляет, сколько надо места ему. Но в этой ситуации я не понимаю, как реализовывать такой вариант, например:

Грид, размер которого меняется. В нем другой грид высотой в половину высоты второго. Во внутреннем гриде эллипс.

Т.е. тут надо, чтобы сначала верхний грид занял все доступное место, чтобы внутрений грид мог забиндиться на его ActualHeight, установить свою высоту и дать эллипсу занять все доступное место.

Через код эту проблему можно решить, но как правильно это делать через xaml (ведь это чисто декларативная задача и должна решаться соответствующим интрументом)?

Автор: SKrivosein 12.12.2012, 22:19
Это достаточно сложный вопрос для того чтобы его раскрыть в одной теме на форуме.
Важно понять что елемент в XAML это не просто кусок декларативной разметки, это прежде всего класс WPF который наследует от класса http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.aspx или классов наследующих от него, достаточно сложную структуру. Прочем в таком вопросе как вы задали играют большую роль http://msdn.microsoft.com/en-us/library/system.windows.dependencyproperty.aspx которые имеют достаточно сложный механизм уведомлений и другие особенности.
Упрощенно говоря события инициализации окна происходят снизу вверх, тоесть вложенные элементы инициализируются раньше своих контейнеров. После инициализации элемента он размещается в контейнере, обвешивается стилями, привязуется к данным.  После события инициализации окна наступает новый этап, событие Loaded движется как бы в обратном направлении, от окна вниз к вложеным элементам. Когда событие достигнет самых нижних элементов, окно становится видимым.
На остнове таких вещей WPF и проводит расчеты, а декларативная сторона XAML это только облегчение для проектирования.
Чтобы разобратся в таких вопросах советую для начала внимательно прочитать допустим соответствующие главы http://www.williamspublishing.com/Books/978-5-8459-1657-0.html (причем 3.5 кое где написана подробней 4.0)

Автор: aush 12.12.2012, 23:51
SKrivosein, Спасибо за ответ.

Мак-Дональда как раз пролистал (и еще пару книжек), но именно детального объяснения со всеми подробностями не нашел, наверное, надо посмотреть повнимательнее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)