Итак, если у меня есть привязка по ширине дочернего объекта, которая связывает его с его родительским объектом ActualWidth
, что произойдет?
Я предполагаю, что родитель измеряет, какую ширину хочет ребенок, ребенок сообщает ширину родительского 0, затем родительский элемент получает фактическое пространство во время компоновки, и он пытается дать дочернему нулю, поскольку ребенок не хочет ничего. Тогда фактическая ширина пространства, предоставленного родителю, должна привести к тому, что привязка изменит ширину дочернего элемента. Я предполагаю, что на этом этапе макет выполняется снова.
Однако это предполагает, что привязка не распространяется так быстро. Я все еще не понимаю, когда связанное значение распространяется на цель. Все зависит от того, когда изменится фактическое значение ширины родительского объекта. Это происходит после завершения макета? а потом связанные штуки обновлять? Каждая привязка прерывает текущий выполняющийся код для обновления целевого значения? если нет, не возникнет ли проблем, если одна привязка распространяет изменение, требующее перерисовки, тогда другая привязка распространяет другое изменение, которое вызывает перерисовку и т. д.
Некоторые люди спрашивали, в чем была моя настоящая проблема:
Поэтому изначально я хотел иметь контрольную растяжку, чтобы заполнить доступное пространство. Достаточно просто, но я хотел, чтобы это было в программе просмотра прокрутки. Scrollviewer предоставляет своим дочерним элементам бесконечное пространство во время измерения. Поэтому вместо этого вы можете привязать ширину и высоту дочернего элемента управления к фактической ширине и фактической высоте родительского элемента; макет делает второй проход, и все кажется шикарным.
Однако позже у меня возникли проблемы аналогичного типа с растяжкой элемента управления в шаблоне управления, но затем я обнаружил, что я могу установить minwidth и alignment = stretch, чтобы он растягивался.
Тем не менее, я отчетливо помнил, как пытался это сделать ранее на другом моем элементе управления, и он не работал, поэтому я вернулся и попытался выяснить, в чем разница между двумя случаями. По сути, все сводилось к тому, что один из них находился в стековой панели несколькими уровнями выше.
Итак, теперь я использую привязку для одного и метод выравнивания minwidth plus для другого. Во всяком случае, меня это интересовало только для того, чтобы убедиться, что то, как я делаю вещи, позже не создает странных ошибок.
Я надеюсь, что макет не запускается сразу после изменения ширины или высоты, а вместо этого система периодически перепроверяет изменения размера.