【问题标题】:UWP Navigation with Frames带框架的 UWP 导航
【发布时间】:2018-01-31 21:32:07
【问题描述】:

在我的 MainPage.xaml 中,我创建了一个 SplitView。我正在使用SplitView 窗格在我的页面之间导航。我没有打开新页面,而是用页面的框架填充 SplitView 内容。

我有一个名为ProjectsPage 的活动框架。在这个框架中,我得到了每个项目的用户控件。现在我想点击一个用户控件并加载一个名为 ProjectDetailsPage 的新框架/页面。

我无法从用户控件导航:

ContentFrame.Navigate(typeof(ProjectDetailsPage), project);

如何加载这个新框架?

【问题讨论】:

    标签: c# uwp .net-core


    【解决方案1】:

    您面临的问题是 UserControls 不是 Frames 并且它们也不是为了将它们用作一个。最好的部分是,导航只发生在Frames

    在您的情况下,简单来说,我的用户控件上有一个按钮,当我单击它时,我想将框架导航到不同的page。如果这是您的查询,那么您可以通过以下三种方式进行查询:

    1. visualtree 直到找到一个框架,然后使用它来导航它。我只读过这种方法,我也没有尝试过。我个人不喜欢上visualtree
    2. 您在MainPageProjectsPage 上创建导航框架的静态/单例实例,然后只需从usercontrol 调用它,然后将其用于导航。这种方法存在问题,由于您在此处直接导航出用户控件,因此在导航之前,您将无法在 ProjectsPage 上执行任何操作(例如,如果您启用了NavigationCache,则重置默认值和等等等等),但作为一种解决方法,您可以将其放在 OnNavigatingFrom 覆盖中。
    3. 推荐:这是我为快速解决方案所做的,我使用事件、委托。我在后面的用户控制代码中写了一个快速事件(例如public event Action<MyClass> RequestViewChange;)。

    并且在ProjectsPage 中,您可以订阅userControl 的此事件,当按下用户控件上的按钮时,简单地启动事件并让ProjectsPage 听它并采取相应的行动。

    我使用Action<T> 作为委托,因为我可以在不定义内容的情况下发送尽可能多的事件参数。

    我知道这是一种非常规的方法,但它的作用就像一种魅力。与上升视觉树相比,麻烦少得多。随意使用 cmets 部分。

    【讨论】:

      猜你喜欢
      • 2020-08-06
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多