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