Я хотел бы иметь контейнер WPF (панель, пользовательский элемент управления и т.д.), который предоставляет свойство, чтобы все дети были доступны только для чтения, если они установлены. Это должно быть похоже на установку родительского элемента управления IsEnabled = false, который также отключает всех дочерних элементов. Какие дети и какие из их свойств следует учитывать, фиксированы (например, TextBox.ReadOnly, DataGrid.ReadOnly,...).
Я попытался создать такой элемент управления, который по существу повторяет все дочерние элементы визуального дерева (рекурсивно) и соответственно обрабатывает элементы управления.
Это отлично работает, за исключением случая, когда дальнейшие изменения повлияют на визуальное дерево, чтобы добавить новых детей. Это верно для ContentControl или ItemsControl. Если дети добавляются в визуальное дерево после того, как я прошел через них, они явно не доступны для чтения.
У меня есть пчела, пытающаяся найти хорошее событие для реагирования (в основном обнаружить новых детей в визуальном дереве), но не смогла найти что-то подходящее. UpdateLayout уволен, но каждый раз часто просматривается визуальное дерево.
Есть ли способ решить это? Существует ли, вероятно, другой подход к тому, чтобы все (соответствующие) дети рекурсивно устанавливались только для чтения через привязку к родительскому элементу?
(И нет: я бы не захотел привязывать все свойства только для чтения к глобальному привязке вместо этого. Дело в том, чтобы иметь один элемент/часть, которая распространяется на всех дочерних элементов)