У меня есть дерево визуалов.Главное окно имеет полноразмерный холст.Холст содержит корень некоторых пользовательских визуальных элементов.Первый пользовательский Visual (A) может расширяться и сжиматься в зависимости от того, что просматривает пользователь, которые находятся в дочерних элементах (B, которые являются DrawingVisuals).По мере изменения размера главного окна я хочу добавить или удалить дочерние элементы из A. То же самое может произойти, когда пользователь прокручивает любое направление в представлении.Когда добавляются дети (Bs), я хочу, чтобы они отображались.(Удаленные B не являются проблемой, потому что они все равно больше не видны.)
Взять сценарий: главное окно 640x480.Я изменил размер в два раза, что позволило бы отобразить больше B, которые затем добавляются в A. До сих пор я не могу получить новые добавленные B для рендеринга, даже при использовании Invalidate ??? () методов FrameworkElement.Я пробовал Invalidate ??? () в главном окне и в A, когда добавляются буквы B.(Я не имею с B, полагая, что они новые.) Похоже, что Invalidate ??? () - не тот путь.
Я нашел хак, который позволяет новым B рендериться при изменении размера,В главном окне я могу удалить A из Canvas и добавить его обратно, что заставляет дерево перерисовываться:
this.contentCanvas.Children.RemoveRange (0, contentCanvas.Children.Count);// удалить корень this.contentCanvas.Children.Add (this.CustomVisual_A);// readd root
По понятным причинам это нежелательно, особенно при прокрутке.В частности, добавляются и удаляются B, которые управляются таким образом, потому что они достаточно велики, и мне нужно уменьшить объем памяти и максимально увеличить скорость рендеринга.Вот почему я иду на неприятности.
Может ли кто-нибудь помочь мне понять, что мне нужно сделать, чтобы заставить вновь добавленные Б отображаться?Большое спасибо!