Как я могу перечислить все страницы XAML в сборке? - PullRequest
0 голосов
/ 10 января 2012

Может ли кто-нибудь помочь мне узнать, как составить список всех страниц XAML в сборке?

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Используйте рефлексию, конечно же:

var assembly = Assembly.GetExecutingAssembly();
var pages = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(PhoneApplicationPage)));
2 голосов
/ 10 января 2012

Если вы ищете страницы, которые были скомпилированы в xap, вы можете перечислить встроенный xaml, используя следующий код:

string assemblyFullName = System.Reflection.Assembly.GetExecutingAssembly().ToString();
string baseName = assemblyFullName.Substring(0, assemblyFullName.IndexOf(","))  + ".g";

ResourceManager manager = new ResourceManager(baseName, System.Reflection.Assembly.GetExecutingAssembly());
var set = manager.GetResourceSet(System.Globalization.CultureInfo.InvariantCulture, true, true);
foreach (DictionaryEntry resource in set)
{
    if (resource.Key.ToString().EndsWith(".xaml"))
    {
        var doc = XDocument.Load(resource.Value as Stream);
        if (doc.Root.Name == "{clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone}PhoneApplicationPage")
        {
            System.Diagnostics.Debug.WriteLine(resource.Key.ToString() + " is a Page");
        }
    }
}
...