Silverlight 2.0: определите, установлено ли свойство зависимости, прежде чем изменять его
У меня есть свойство зависимости (Foreground) для пользовательского элемента управления, который наследуется от Control. Когда я загружаю элемент управления, я хочу посмотреть, установил ли пользователь свойство зависимости или использует ли он значение по умолчанию, прежде чем устанавливать для него значение. Проблема немного сложнее, чем здесь:
Элемент управления находится в пользовательской библиотеке элементов управления, которую пользователь добавляет в свой проект. Когда они настраивают свой проект, у меня есть возможность добавить строку в их файл app.xaml с указанным ключом x:, который содержит параметры, которые я прочитал при установке значений по умолчанию для моих элементов управления. Однако, если они устанавливают значение либо в коде, либо в xaml, я не хочу устанавливать значение с этим глобальным значением. Вот несколько случаев, чтобы помочь визуализировать то, о чем я говорю:
Пользователь создает элемент управления из моей библиотеки и размещает его на своей странице. Затем они устанавливают передний план на зеленый. Я хочу, чтобы значение переднего плана было зеленым для этого элемента управления.
Пользователь добавляет в свой app.xaml специальную строку, в которой говорится, что он хочет, чтобы все элементы управления определенного вида имели передний план красного цвета. Я хочу, чтобы значение переднего плана всех элементов управления такого типа было красным.
Пользователь добавляет в свой app.xaml специальную строку, в которой говорится, что он хочет, чтобы все элементы управления определенного вида имели передний план красного цвета. Затем они устанавливают значение переднего плана одного элемента управления (в xaml) на желтый. Я хочу, чтобы значение переднего плана всех элементов управления такого типа было красным, за исключением того, которое они в противном случае указали как желтое.
При загрузке элемента управления я хочу прочитать свойство зависимостей, чтобы увидеть, установили ли они значение или это значение по умолчанию, определенное в стиле. Если это значение по умолчанию, я хочу прочитать их специальную строку из файла app.xaml и установить передний план для этого цвета.
2 ответа
Я провел немного больше исследований и считаю, что нашел ответ. Когда я загружаю элемент управления (или обновляю), я проверяю тип ReadLocalValue ( ForegroundProperty), если этот тип - System.Object, тогда он не установлен в xaml. Однако, если этот тип отличается от System.Object (например, System.Windows.Media.Brush), он устанавливается в xaml.
Расширение вашего решения для завершения со страницы MSDN ReadLocalValue:
if (ReadLocalValue(FontSizeProperty) == DependencyProperty.UnsetValue)
// Do your thing...
То есть существует DependencyProperty.UnsetValue, для которого можно проверить, установлено значение или нет.