Добавление объединенного словаря в объединенный словарь

Кажется, я не могу добавить объединенный словарь в коллекцию объединенных словарей в XAML.

Theme.xaml

    

Ресурсы приложений

     <!--   -->    

Примечание: если я поместил оба ResourceDictionaries в Appication.Resources MergedDictionary (закомментируйте тему.xaml и раскомментируйте два других словаря), они оба загрузится правильно. Однако, как определяются наши ресурсы, это может означать, что будет загружено немало ресурсов, а для динамической загрузки я хотел бы иметь возможность определять шаблоны.

Это ошибка оптимизации, см. Эту ссылку

При создании каждого объекта в XAML, если присутствует стиль по умолчанию (т.е. стиль с ключом типа), этот стиль должен применяться. Как вы можете себе представить, есть несколько оптимизаций производительности, чтобы сделать (подразумеваемый) поиск легкого веса, насколько это возможно. Один из них заключается в том, что мы не заглядываем в Словари ресурсов, если они не помечены как «содержащие стили по умолчанию». Есть ошибка: если все ваши стили по умолчанию вложены в объединенные словари на три уровня (или глубже), верхний словарь не получает помечены, поэтому поиск пропускает его. Работа вокруг заключается в том, чтобы поместить стиль по умолчанию в что-то, что угодно, в корневой словарь.

Поэтому добавление фиктивного стиля в корневой словарь исправляет это. пример

          

Ваш образец кода имеет знак двойного равенства в источнике словаря объединенного ресурса App.xaml для Palette.Blue.xaml. Я предполагаю, что это опечатка для вашего примера, размещенная здесь, а не ваша настоящая проблема.

Трудно понять, как связать все ресурсы непосредственно в XAML. Самый простой способ сделать это – на панели «Ресурсы» в Blend. Я создал приложение Silverlight с файлами ресурсов, названными как ваш пример, затем открыл проект в Blend и очень быстро связал их.

App.xaml

           

Theme.xaml

       

Template.xaml

     

Palette.Blue.xaml

    

MainPage.xaml

        

Конечно, если вы связываете ресурсы с разных сборок, это будет выглядеть по-другому. На самом деле, в этом случае, я бы предложил изучить слияние ваших словарей в коде позади.

Если это происходит на одном из ваших собственных элементов управления, я обнаружил, что другое решение устанавливает для свойства DefaultStyleKey значение null:

 DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(null)); 

Я понятия не имею, почему это работает, но это кажется!

  • Как скрыть кнопку закрытия в окне WPF?
  • WPF TreeView HierarchicalDataTemplate - привязка к объекту с несколькими дочерними коллекциями
  • Есть ли ansible чит-лист WPF?
  • Взаимоисключающие элементы меню?
  • WPF Combobox: различные шаблоны в текстовом поле и выпадающем списке
  • Почему обертки свойств .NET обойдены во время выполнения при настройке свойств зависимостей в XAML?
  • Где Application.DoEvents () в WPF?
  • Связывание в текстовом столбце таблицы данных WPF
  • Приложение WPF, в котором есть только значок в трее
  • Вызывающий stream должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого
  • Как изменить шаблон заголовка Pivot в Windows Phone 8
  • Interesting Posts
    Давайте будем гением компьютера.