Я пытаюсь понять, почему WPF не сходит с ума, когда я устанавливаю окно для изменения размера его содержимого, а затем устанавливаю его содержимое, чтобы взять все свободное пространство ... Любая идея?Как WPF разрешает циклическую зависимость размера?
ответ
В системе макета есть два прохода - измерьте и расположите.
Сначала в мере прохождения каждого ребенка предоставляется предлагаемый размер, и это распространяется по дереву. Это устанавливает свойство каждого ребенка DesiredSize
.
В следующем, организуйте проход, учитывается DesiredSize
, но у родителя есть последнее слово о том, сколько фактического доступного размера он даст ребенку, и родительский помещает каждый ребенок соответственно, информируя его о фактический размер, который он получает, и так далее вниз по дереву.
Также рассмотрят несколько мыслимых случаев угла:
- Ребенок требует
double.Infinity
нужного размера: явно не разрешено, вызывает исключение - ребенок устанавливает свой
HorizontalAlignment
«натянуть»: родитель не предлагает бесконечный фактического размер - окно устанавливается в
SizeToConent
, ребенок установлен не установлено «Stretch
», никаких других ограничений:- Окно первого предлагает бесконечного размер меры
- Ребенок требует размера, измеренного его дети (ширина текста, поля, и т.д.) - не бесконечно размера
- Упорядочить: Окно устанавливает свой размер до минимума системного или определяемого по желанию на ребенка, в зависимости от того, что больше (не может быть бесконечным)
- ребенок тянется, чтобы соответствовать размеру, определенный в предыдущем шаге
- Окно первого предлагает бесконечного размер меры
Это не так сложно: если окно настроено на растяжение, чтобы соответствовать его контенту, то он не имеет статического размера, поэтому он принимает значения по умолчанию. Спустившись по визуальному дереву, элемент управления хочет растянуться, чтобы заполнить окно - он не форсирует никаких измерений, а вместо этого принимает любой размер, который имеет окно (по умолчанию).
Я предполагаю, что элементы всегда имеют размер (по умолчанию один, если не указано выше в иерархии) и упоминание о том, является ли этот размер фиксированным или оборотным.
Я только угадываю здесь, но это просто для того, чтобы доказать, что ситуация не так плоха, как кажется. Имея хорошую стратегию обновления, элементы могут настраиваться по отношению друг к другу разумным образом.
Ok. Я только что сделал еще один тест с текстовым полем. Когда я добавляю текст к нему, окно растягивается для размещения контента. Таким образом, контент является своего рода форсированием измерения. Что произойдет в этом случае? – subb
Что может случиться, так это то, что TextBox разрешено изменять размер, и это окно разрешено. В этом случае цикла больше нет, потому что TextBox имеет некоторые размеры, которые он хочет получить, а именно размер содержимого - больше не связанный с размером окна. Изменение размеров распространяется на визуальное дерево, и окно с удовольствием обязывает, изменяя размер. Это не приводит к изменению размера TextBox. –
- 1. Невозможно создать циклическую зависимость
- 2. как разрешить циклическую зависимость maven
- 3. Guice проксирования поддерживать циклическую зависимость
- 4. Ломать циклическую зависимость в C++
- 5. Угловые JS решить циклическую зависимость
- 6. Ломать циклическую зависимость в Dagger
- 7. Не удалось разрешить циклическую зависимость
- 8. заголовки включают и циклическую зависимость
- 9. Невозможно понять циклическую зависимость terraform
- 10. Как решить эту циклическую зависимость в EF
- 11. Как обрабатывать циклическую зависимость от регистратора службы
- 12. Как исправить циклическую зависимость для импорта
- 13. Как я могу разрешить циклическую зависимость весной
- 14. Как удалить эту циклическую зависимость класса?
- 15. BuildUp не разрешает зависимость
- 16. Функция шаблона C++ вызывает циклическую зависимость
- 17. Может ли инъекция зависимости предотвращать циклическую зависимость?
- 18. Использование `$ mdToast` внутри перехватчика запускающего циклическую зависимость
- 19. Угловая 2 - Невозможно создать циклическую зависимость
- 20. Makefile зависимостей библиотеки - разрешить циклическую зависимость
- 21. Исключая циклическую зависимость и создать объект
- 22. Gradle не разрешает весеннюю зависимость
- 23. OCamlbuild не разрешает зависимость подкаталога
- 24. SBT не разрешает зависимость Squeryl
- 25. Управление как зависимость/WPF
- 26. Как вы разрешаете циклическую зависимость с внутренним классом?
- 27. Как разрешить циклическую зависимость в моих SpriteKit игровых классов
- 28. Как разрешить циклическую зависимость при определении общих моделей в django
- 29. DI в Zend Framework 2. Как сделать циклическую зависимость?
- 30. Как разбить и улучшить циклическую зависимость без использования прокси-шаблона?
Красиво объяснено. – Stimul8d
Да, спасибо. Для других я читал http://msdn.microsoft.com/en-us/library/ms745058.aspx, а также использовал Refactor для просмотра реального кода WPF. – subb
'Добро пожаловать. Вы имеете в виду * Reflector *, верно? :) –