Конструктор не является прямым эквивалентом запуска приложения из соображений эффективности.
Одна из вещей, которые он не будет делать, - это создавать статические объекты, которые вы связали. Это означает, что просто привязка к stati c не будет работать в конструкторе.
Вы можете подумать, что если он объединяет словари ресурсов с помощью app.xaml, тогда «просто» создание экземпляра класса stati c кажется довольно простым . Однако им нужно где-то провести черту.
Следовательно, ваш третий пример работает, потому что разработчику нужно превратить xaml в пользовательский интерфейс, и эта привязка относится к свойству части пользовательского интерфейса, которая, таким образом, создается.
Привязка к stati c не
Ваши альтернативы включают:
Оберните свойство stati c в свойство viewmodel, где эта модель просмотра создается в xaml.
Предоставляет контекст данных времени разработки, который полностью имитирует данные или каким-то образом создает фиксированный экземпляр вашей модели просмотра.
FallbackValue и TargetNullValue в вашей привязке, чтобы задать «жестко запрограммированное» значение по умолчанию.
Напишите расширение разметки, которое будет читать stati c.
Последнее не так сложно, как кажется, если вам просто нужны данные только для чтения. MarkUpExtension имеет только один метод - ProvideValue для переопределения. Вам "просто" нужен класс, унаследованный от MarkUpExtension с этим методом:
public override object ProvideValue(IServiceProvider serviceProvider)
{
// Return value from static class' property here.
}
Кажется, что вам нужен bru sh для фона, так что это предположительно только для чтения, а расширение разметки может быть лучший вариант.