Ресурсы стилей или странное поведение

233
23 июня 2017, 05:56

У меня в компании есть библиотека с разными "кастомными" контролами для WPF. "Кастомные", они лишь потому что там изменена визуальная составляющая, а именно своих, переделанных стандартных, еденицы.

Недавно в проект, над которым я работаю, добавил данную библиотеку. Прописал в своем Themes/Generic.xaml и добавил референсы , все как надо :

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/WpfInsideControls;component/Themes/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>

Стили заработали, но ! У меня есть огромный DataGrid, тоже "кастомный", в котором лежит порядка 100т объектов, включена виртуализация по строкам. Всякий раз когда я пытался проскролить вниз, в Debug сыпались варнингы, о том что стиль не подтянулся, при этом UI начал тормозить, но все прорисовывалось.

На StackOverFlow нашел, что необходимо использовать не DynamicResource, а StaticResource. А теперь внимание : стили автоматически применяются к контролам, мне не надо явно указывать каждому контролу какой стиль брать, просто подтягиваю dll и добавляю в ResourceDictionary.

Я поразмышляв подумал, что если WPF воспринимает стили динамическими, это мои догадки, надо их сделать статическими. Я прописал при инициализации приложения следующее :

Application.Current.Resources.MergedDictionaries.Add(Application.LoadComponent(new Uri("/WpfInsideControls;component/Themes/Generic.xaml", UriKind.Relative)) as ResourceDictionary);

То есть я напрямую своему WPF приложению говорю, что "Будь добр приатачиться сюда", в xaml все осталось прежним. И о чудо! Заработало и не сыпит варнинги, и UI не провисает!

Вопрос : Почему и как было вызвано данное поведение, мое решение правильное?

READ ALSO