【发布时间】:2018-01-08 20:01:33
【问题描述】:
我正在尝试创建一种模块化的页面加载方式,每个页面在主窗口标题中都有自己的导航菜单项和一个单独的框架,以使它们始终加载到内存中(并播放精美的动画等)
这是包含加载页面的类。
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(s) 的方式
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
【问题讨论】:
-
导航 URI 中的
lotusURI 方案是什么?通常,包 URI 应使用application或siteoforigin用于包部分方案。您使用的是自定义 URI 解析器吗? -
另外,您在指定
UriKind.Relative时提供了一个absolute URI。如果您改为指定 relative URI,会发生什么?例如,"/Views/UserPages/{Page}.xaml". -
@MikeStrobel 不认为我会这样做,如果这有助于澄清问题,我已经添加了代码仓库的链接。谢谢
-
@MikeStrobel 另外,Relative UriKind 不会改变任何东西。