Мы делаем пользовательский чертеж в подклассе управления OnRender
. Этот код чертежа основан на внешнем триггере и данных. Таким образом, всякий раз, когда срабатывает триггер, нам нужно повторно отобразить элемент управления на основе этих данных. То, что мы пытаемся сделать, это выяснить, как заставить элемент управления повторно отображать, но не пройти весь макет.
Как было указано выше, большинство ответов, которые я видел, вращаются вокруг недействительности Visual
, что делает недействительным макет, который заставляет новую меру и устраивает проходы, что очень дорого, особенно для очень сложных визуальных деревьев, как у нас. Но опять же, макет не изменился, и VisualTree. Единственное, что делает, это внешние данные, которые получаются по-разному. Таким образом, это чисто чистая проблема рендеринга.
Опять же, мы просто ищем простой способ сообщить контроллеру, что ему нужно перезапустить OnRender
. Я видел один "взлом", в котором вы создаете новый DependencyProperty
и регистрируете его с помощью "AffectsRender", который вы только что установили для некоторого значения, когда хотите обновить элемент управления, но меня больше интересует, что происходит внутри по умолчанию для этих свойств: то, что они называют, влияет на это поведение.
Обновление:
Ну, похоже, что такого вызова нет, так как даже флаг AffectsRender
по-прежнему вызывает уступку Arrange внутри (в соответствии с нижеприведенным ответом CodeNaked), но я опубликовал второй ответ, который показывает встроенное поведение а также обход, чтобы подавить код прохода макета от запуска с простым размером NULL как флаг. См. Ниже.