Есть 3 UserControl, вложенных друг в друга. Для старшего UserControl прописаны DependencyProperty - цвет элементов, которые будут задаваться в разметке и привязываться к DynamicResource, чтобы обновляться в соответствии с темой приложения. Этот цвет должны подхватывать элементы младших UserControl-ов. Каким образом осуществить привязку цвета этих контролов к DynamicResource правильно, чтобы цвет при этом обновлялся при смене темы приложения? При этом вложенные UserControl-ы могут удаляться или добавляться пользователем. До этого в разметке вложенных контролов просто привязывал их цвет к DynamicResource самого приложения, что неверно и не даёт возможность прописывать цвета для разных экземпляров старшего UserControl-а. Нужно при создании вложенного UserControl-а в коде делать привязку всякий раз, когда пользователь создаёт новый экземпляр или есть какие-то механизмы автоматической передачи свойств от старшего контрола всем младшим (Child)?
Эта задача решается созданием наследуемого присоединённого свойства зависимостей. В родительском контроле объявляется такое свойство с обязательным указанием в FrameworkPropertyMetadata опции FrameworkPropertyMetadataOptions.Inherits:
public static readonly DependencyProperty SomeStuffParentUserControlProperty = DependencyProperty.RegisterAttached(
"SomeStuffParentUserControl",
typeof(double),
typeof(ParentUserControl),
new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.Inherits));
Затем это свойство либо наследуется потомками:
public static readonly DependencyProperty SomeStuffParentUserControlProperty = ParentUserControl.SomeStuffParentUserControlProperty.AddOwner(typeof(ChildUserControl));
либо делается привязка к свойству с обязательным указанием на родителя в xaml для ChildUserControl:
Width="{Binding (local:ParentUserControl.SomeStuffParentUserControl)}"
Может возникнуть ошибка при записи свойств в xaml - свойство не распознаётся. Тогда надо удалить свойство в родительском UserControl и обратно его вставить. VS тогда начинает распознавать его.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Делаю скрипт для перемещения персонажа по урокам в интернетеЗастрял на моменте прыжка
MVC CORE 21; У меня есть два проекта Web ( основной проект, в нём есть форум, блог
Добавил в объект новое поле, объект используется как источник данных для RDL отчета, приложение на winformsИспользовал все доступные мне танцы...