Sort of.
You can enumerate all BAML (compiled XAML) files as follows:
var resourcesName = assembly.GetName().Name + ".g";
var manager = new System.Resources.ResourceManager(resourcesName, assembly);
var resourceSet = manager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
var allXamlFiles =
from entry in resourceSet.OfType<DictionaryEntry>()
let fileName = (string)entry.Key
where fileName.EndsWith(".baml")
select fileName.Substring(0, fileName.Length-5) + ".xaml";
There is no way to know which ones of these are ResourceDictionaries and which are other XAML such as Windows or UserControls without actually loading them. So the answer to your direct question is "no" unless you load each XAML you find to check if it is a ResourceDictionary. This would be very slow.
On the other hand, if you're willing to use a naming scheme for your ResourceDictionaries, then you can enumerate all BAMLs in your assembly and select whichever match your naming scheme, and trust that they are ResourceDictionaries. Just extend the "where" clause in the above query.
Therefore the answer is "sort of."
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…