WPF - очистка только определенных ресурсных словарей - PullRequest
1 голос
/ 11 октября 2009

Я применяю «темы» к своему приложению WPF, удаляя все объединенные словари (Resources.MergedDictionaries.Clear ()) и новые на основе выбранной темы.
Вместо очистки всех словарей, я хотел бы очистить только некоторые «тематические» словари, оставляя другие загруженными. Как я могу это сделать? Я не нашел способа различать словари при их итерации ...

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 11 октября 2009

Я предполагаю, что вы выполняете объединение на уровне Application, в противном случае вы можете просто ввести промежуточный элемент управления, единственной задачей которого является размещение словарей тем. В таком случае я бы предложил использовать многоуровневый подход, при котором первый объединенный словарь содержит все тематические словари:

<Application.Resources>
    <!-- all application level resources -->
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!-- theme-related resources -->
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <!-- merge in theme-related dictionaries here -->
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>

            <!-- merge in other application-level dictionaries here -->
        </ResourceDictionary.MergedDictionaries>

        <!-- other resources -->
        <SolidColorBrush x:Key="Foo">Black</SolidColorBrush>
    </ResourceDictionary>
</Application.Resources>

Теперь вы можете ориентироваться только на связанные с темой ресурсы с кодом, подобным следующему:

Application.Current.Resources.MergedDictionaries[0].Clear();
Application.Current.Resources.MergedDictionaries[0].Add(...);
...