Когда объект создается из XAML (или BAML), XamlReader
десериализует все содержимое XAML. Каждый найденный им элемент XAML создает экземпляр объекта - поэтому элементы Style
в элементе UserControl.Resources
генерируют Style
объекты, которые добавляются в словарь ресурсов пользовательского элемента управления во время десериализации объекта. (На самом деле это немного сложнее, чем это, поскольку, очевидно, есть части десериализации XAML, которые являются асинхронными, но это достаточно близко для целей этого обсуждения.)
Важно понимать, что Resources
не является статическим свойством. Каждый экземпляр пользовательского элемента управления имеет свой собственный словарь ресурсов. Если вы поместите 300 стилей в пользовательский элемент управления XAML и создадите 100 пользовательских элементов управления, вы будете создавать 30 000 Style
объектов. Это верно, используете ли вы объединенные словари или нет.
Если ваш словарь ресурсов настолько велик, как вы говорите, безусловно, лучшее, что нужно сделать, - это поместить его в свойство Resources
приложения. Таким образом, вы платите цену за десериализацию каждого объекта только один раз.