如何列出程序集中的所有XAML页面?

如何列出程序集中的所有XAML页面?,xaml,windows-phone-7,assemblies,Xaml,Windows Phone 7,Assemblies,有谁能帮我知道如何列出程序集中的所有XAML页面吗?当然可以使用反射: var assembly = Assembly.GetExecutingAssembly(); var pages = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(PhoneApplicationPage))); 当然,使用反射: var assembly = As

有谁能帮我知道如何列出程序集中的所有XAML页面吗?

当然可以使用反射:

var assembly = Assembly.GetExecutingAssembly();
var pages = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(PhoneApplicationPage)));

当然,使用反射:

var assembly = Assembly.GetExecutingAssembly();
var pages = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(PhoneApplicationPage)));

如果要查找编译到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");
        }
    }
}

如果要查找编译到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");
        }
    }
}

这并不是那么容易。从PhoneApplicationPage继承的类不一定是XAML页。它可能恰好是完全用代码实现的,这并不是那么容易。从PhoneApplicationPage继承的类不一定是XAML页。它可能恰好完全在代码中实现。很抱歉,否决票是意外单击。它现在似乎被锁定了,我无法删除它。很抱歉,否决票是意外点击。它现在好像被锁上了,我无法取下它。