2010-07-16 2 views
4

Есть ли способ добавить ResourceDictionary на уровне Window вместо уровня приложения?Программно добавить в Window.Resources в WPF

Я вижу много примеров для чего-то вроде этого:

Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary); 

Однако, ничего подобного, что я ожидал бы там быть, например:

Window.Resources.MergedDictionaries.Add(myResourceDictionary); 

Заранее спасибо,

ответ

7

Вы не можете:

Window.Resources 

Однако, вы можете сделать:

this.Resources.MergedDictionaries.Add(myResourceDictionary); 

Resources является собственностью FrameworkElement и разделяется по типам приложений и окна (и большинство других классов пользовательского интерфейса в WPF). Однако это свойство экземпляра, а не статическое свойство, поэтому вам нужно работать с ресурсами конкретного экземпляра. Когда вы ввели «Window.Resources», вы пытались добавить к типу «окно», а не к определенному окну.

Это работает в вашей строке приложения, так как Application.Current возвращает текущий экземпляр приложения, поэтому вы работаете с правильным конкретным экземпляром (а не с типом).

+0

Это именно то, что мне нужно, спасибо! – TheGeekYouNeed

+0

Если я это сделаю, ссылки на ресурсы теперь DynamicResource вместо StaticResource? (Я снял стили с самих страниц окна и помещал их в словарь) – TheGeekYouNeed

+0

@ TheGeekYouNeed: Да, в основном. Они не могут быть разрешимы во время компиляции, поэтому их нужно обрабатывать динамически ... –

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