动态制作的页面不会加载实际的页面内容/代码

时间:2018-01-08 20:01:33

标签: c# wpf loading frame

我正在尝试创建一种加载页面的模块化方式,每个页面在主窗口标题中都有自己的导航菜单项和一个单独的框架,以使它们始终加载到内存中(并播放精美的动画等)。 / p>

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

 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中的导航实际上是导航事件的成功,但帧不报告任何内容,页面代码不执行且没有设计。

有什么建议吗?感谢。

编辑:

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

1 个答案:

答案 0 :(得分:0)

我导航到该页面的方式存在问题。 事实证明,&#34;应用程序&#34;在URI中没有上下文敏感,实际上按原样使用。

这是正确的导航方式:

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