2

У меня есть свойство зависимостей (Foreground) на настраиваемом элементе управления, который наследуется от Control. Когда я загружаю элемент управления, я хочу узнать, установил ли пользователь свойство зависимостей или использует его значение по умолчанию, прежде чем устанавливать для них значение. Проблема немного сложнее, чем то, что здесь:Silverlight 2.0: Определите, установлено ли свойство зависимостей перед его изменением.

Элемент управления находится в пользовательской библиотеке управления, которую пользователь добавляет к своему проекту. Когда они настраивают свой проект, у меня есть возможность добавить строку в файл app.xaml с заданным ключом x:, который содержит параметры, которые я читаю, при установке значений по умолчанию для моих элементов управления. Однако, если они устанавливают значение как в коде, так и в xaml, я не хочу устанавливать значение с этим глобальным значением. Вот несколько случаев, чтобы помочь визуализировать то, что я говорю о:

  1. Пользователь создает элемент управления из моей библиотеки и помещает его на своей странице. Затем они устанавливают передний план на зеленый. Я хочу, чтобы значение параметра переднего плана было зеленым для этого элемента управления.

  2. Пользователь добавляет специальную строку в свой app.xaml, который заявляет, что хочет, чтобы все элементы управления определенного вида имели передний план красного цвета. Я хочу, чтобы значение переднего плана всех элементов управления такого типа было красным.

  3. Пользователь добавляет специальную строку в свой app.xaml, который заявляет, что хочет, чтобы все элементы управления определенного вида имели передний план красного цвета. Затем они устанавливают значение переднего плана одного элемента управления (в xaml) на желтый. Я хочу, чтобы значение переднего плана всех элементов управления такого типа было красным, за исключением того, которое они иначе обозначили как желтый.

При загрузке элемента управления, я хочу прочитать свойство зависимостей, чтобы увидеть, если они установили значение, или, если это значение по умолчанию, которое определяется в стиле. Если это значение по умолчанию, я хочу затем прочитать их специальную строку из файла app.xaml и установить переднюю часть этого цвета.

ответ

1

Я провел немного больше исследований и считаю, что нашел ответ. Когда я загружаю элемент управления (или обновление), я проверяю тип ReadLocalValue (ForegroundProperty), если этот тип является System.Object, тогда он не установлен в xaml. Однако, если этот тип является чем-то другим, то System.Object (как и System.Windows.Media.Brush), то он устанавливается в xaml.

5

Расширение вашего решения, чтобы закончить, от MSDN page ReadLocalValue:

if (ReadLocalValue(FontSizeProperty) == DependencyProperty.UnsetValue) 
    // Do your thing... 

То есть, существует DependencyProperty.UnsetValue против которой, чтобы проверить, если значение установлено или нет.

Смежные вопросы