Замена ResourceDictionary из кода - PullRequest
       21

Замена ResourceDictionary из кода

0 голосов
/ 07 февраля 2012

Мне нужно скачать RecourceDictionary из сети и подключить его к проекту.

Так что в App.xaml у меня есть что-то вроде заглушки с текущим ResourceDictionary:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ResourceDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Затем я загружаю и сохраняю новый ResourceDictionary (ResourceDictionary2.xaml) в IsolatedStorage. Затем мне нужно заменить текущую на новую.

На самом деле, если бы этот другой файл был бы прямо в папке проекта, я бы сделал так:

var newDict = new ResourceDictionary { 
     Source = new Uri("/WP7ResourceDictionaryTest;component/ResourceDictionary2.xaml", UriKind.Relative) 
};
ResourceDictionary appResources = App.Current.Resources;
appResources.MergedDictionaries.RemoveAt(0);
appResources.MergedDictionaries.Add(newDict);

этот код работает.

Так что вопрос: как заменить текущий RecourceDictionary файлом, который находится в IsoStorage? Я попытался настроить Ури так:

newDict.Source = new Uri("isostore:/ResourceDictionary2.xaml");

но это не работает.

1 Ответ

1 голос
/ 07 февраля 2012

Прежде всего вы должны использовать мою универсальную утилиту изолированного хранилища, найденную здесь

Затем выполните следующее:

ResourceDictionary isoResourceDictionary = (ResourceDictionary)IsolatedStorage_Utility.Load<ResourceDictionary>(filename);
appResources.MergedDictionaries.RemoveAt(0);
appResources.MergedDictionaries.Add(isoResourceDictionary);

Следующая проблема - вы ДОЛЖНЫ сделать это до InitializComponents, потому что Silverligh / WP7 ONLY допускает StaticResources.Единственный способ обойти это - обновить текущую страницу.

...