Вот разница,
StaticResource загружается во время загрузки, это означает, что ключ ресурса, который вы используете, должен быть лексически определен перед использованием.
Итак, статический ресурсв случае пользовательского элемента управления должен быть определен только выше определения элемента в том же файле generic.xaml.Так что, если вы поместите свои кисти в другой xaml, он, конечно, не будет работать в случае статического ресурса.
Это причина, если другие ресурсы типа xaml не включены в виде какого-либо импорта ввремя компиляции в одном файле, вы не можете использовать статический ресурс в файле.Это просто означает, что фактический xaml файла / компонента / элемента управления каким-то образом должен содержать фактическую ссылку на статический ресурс, который вы используете.
Теперь я сомневаюсь, почему DynamicResource не будет работать, потому что, вероятно, DynamicResource будет выглядеть тольков приложении (где используется элемент управления) ResourceDictionary, но не generic.xaml.
Я не уверен на 100%, но я чувствую, что если вы определяете пользовательский элемент управления и если вы используете DynamicResource, тогда ваши ресурсы должны находиться в Словаре ресурсов приложения или в родительском контейнере словаря ресурсов вашего элемента управления, но это можетне может быть в generic.xaml.
Поскольку DynamicResource будет искать только ключи в логическом дереве времени выполнения элемента управления, и поэтому может не найти ресурсы, которые находятся в generic.xaml, если файл generic.xaml явно не добавлен вApplication.Resources.
Сводка: StaticResource должен быть доступен лексически, прежде чем в том же файле во время компиляции, ресурсы будут доступны в словаре Application.Resources, он все еще может быть найден в логическом дереве, ново время компиляции только в той же dll или в том же generic.xaml.
DynamicResource должен быть найден в Application.Resources и в логическом дереве элемента управления во время выполнения.
Для получения дополнительной информациипожалуйста, проверьте Обзор ресурсов