动态生成的页面不加载实际页面 content/code

Dynamically made pages don't load actual page content/code

我正在尝试创建一种加载页面的模块化方式,每个页面在主 window header 中都有自己的导航菜单项和一个单独的框架,以便始终将它们加载到内存中(以及播放精美的动画等)

这是包含已加载页面的 class。

 public sealed class PageContainer : Frame
{
    public string Title;

    public PageContainer(string Page, bool CustomUri = false)
    {
        Visibility = System.Windows.Visibility.Collapsed;
        NavigationUIVisibility = NavigationUIVisibility.Hidden;
        Title = Page;

        if(!CustomUri)
        {
            Navigate($"pack://lotus:,,,/Views/UserPages/{Page}.xaml", UriKind.Relative);
        }
        else
        {
            //todo
        }

        Console.WriteLine($"Navigation Item created {Title} with ?CustomUri: {CustomUri}");
    }

    public bool Visible
    {
        get => Visibility == System.Windows.Visibility.Visible;
        set => Visibility = value ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
    }
}

下面是我如何创建 PageContainer

Animations.PageTransitionAnimations AnimationLibrary;

    public double _SlideAnimationLenght = 250;

    public MainWindow()
    {
        InitializeComponent();

        //Initialize Animation Library
        AnimationLibrary = new Animations.PageTransitionAnimations(this);

        InitializePage("Library");
        InitializePage("Preferences");
        InitializePage("Plugins");
        InitializePage("Information");

        foreach(PageContainer pp in LoadedContainers)
        {
            pp.Visible = true;
            pp.BeginAnimation(MarginProperty, AnimationLibrary.ToLeft);
        }
    }

    //Load a page and add it to navigation bar, if NoHeader, then don't add it to navigation
    private void InitializePage(string page, bool noHeader = false)
    {
        if(!noHeader)
        {
            //Add page to navigation bar and set style
            NavigationHeader.Children.Add(new NavigationItem(page)
            {
                Style = FindResource("HeaderMenu") as System.Windows.Style
            });
        }

        //Add Page to PageContainer and Initialize it
        PageContainer _page = new PageContainer(page);

        _containers.Add(_page);
        PagesContainer.Children.Add(_page);
    }

    //Public LoadedContainers, no setter
    private List<PageContainer> _containers = new List<PageContainer>();
    public List<PageContainer> LoadedContainers => _containers;

发生的情况是PageContainer中的navigation实际上是成功的navigation事件,但是frame没有上报任何内容,页面代码没有执行,也没有设计。

有什么建议吗?谢谢

编辑:

页面本身没有问题,因为我手动加载它们,它们确实有效。此外,这里是完整代码的 link:https://github.com/FaithLV/lotus

我导航到该页面的方式存在问题。 事实证明,URI 中的 "application" 不是上下文敏感的,实际上是按原样使用的。

正确的导航方式如下:

 Navigate(new Uri($"pack://application:,,,/Views/UserPages/{Page}.xaml"), UriKind.Absolute);