【问题标题】:UWP: How to get list of all Page Objects and the corresponding TypeName in the AssemblyUWP:如何在程序集中获取所有页面对象的列表和相应的 TypeName
【发布时间】:2018-03-07 15:07:43
【问题描述】:

在 UWP 中,我如何在程序集中获取所有页面对象及其对应字符串名称的列表。例如,如果我创建了一个名为 Page1Page2Page3Page,并使用带有控件的 XAML 填充这些页面,我该如何动态创建所有 Page 对象及其对应对象的列表字符串名称?

我有一些适用于 WPF 的代码,我想知道如何在 UWP 中做类似的事情:

class MyPage : Page {
public List<Uri> GetXamlFiles()
{
    var pages = new List<Uri>();
    var asm = System.Reflection.Assembly.GetExecutingAssembly();
    Stream stream = asm.GetManifestResourceStream(
        asm.GetName().Name + ".g.resources");

    DataContext = pages;

    using (var reader = new System.Resources.ResourceReader(stream))
    {
        foreach (System.Collections.DictionaryEntry entry in reader)
        {
            pages.Add(new Uri(((string)entry.Key).Replace(".baml", ".xaml"),
                UriKind.Relative));
        }
    }
    return pages;
}

public ObservableCollection<TXamlPage> XamlPages = null;

private void Page_Loaded(object sender, RoutedEventArgs e)
{
        List<Uri> pages = GetXamlFiles();

        XamlPages.Clear();
        foreach (var uri in pages)
        {
            XamlPages.Add(new TXamlPage { uri = uri, Name = System.IO.Path.GetFileName(uri.LocalPath)});
        }
        A1ListBoxPages.ItemsSource = pages;
    }

} //class

public class TXamlPage
{
    public string Name;
    public Uri uri;

    public override string ToString()
    {
        if (Name == null) return "<null>";
        return Name;
    }
}

【问题讨论】:

    标签: c# uwp


    【解决方案1】:

    您可以只搜索从Page 派生的所有类型:

    private IEnumerable<TypeInfo> GetAllPageTypes()
    {
        var currentAssembly = this.GetType().GetTypeInfo().Assembly;
        var pageTypeInfo = typeof(Page).GetTypeInfo();
        return currentAssembly.DefinedTypes.Where(t => pageTypeInfo.IsAssignableFrom(t)).ToList();
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2013-07-01
      • 2017-02-03
      • 1970-01-01
      • 2010-09-08
      • 2015-11-06
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      相关资源
      最近更新 更多