首页 文章

从与其主机不同的页面访问SplitView控件 - C#XAML Windows 10 UWP

提问于
浏览
0

预警,我是C#和XAML的新手,但我真的很喜欢Windows 10 UWP应用程序 . 我有一个关于如何正确处理SplitView的问题 .

我有一个主页面,我有一个SplitView控件 . 在SplitView内容中,我添加了一个框架,用于导航到其他页面 . 我想在子页面上添加汉堡按钮以在主页面上打开SplitView,但我无法从子页面访问SplitView控件 . 如何使SplitView控件可访问,以便子页面中的汉堡按钮可以打开SplitView窗格?

另一种方法是在主页面中添加一个 Headers 并在那里有一个静态汉堡包按钮,但我不喜欢这个选项,因为它使处理文本 Headers 内容更加困难 . 另一种方法是将SplitView复制到每个页面 . 我也不想这样做 .

任何建议都太棒了!谢谢 .

3 回答

  • 1

    我强烈建议您选择在主页面中包含汉堡包按钮 . 用户总是希望每次都在同一个位置,改变这种方法可能会导致糟糕的用户体验 .

    您也不希望重复代码,因此您不希望在每个页面上重新创建按钮以及任何其他功能,如打开/关闭命令 .

    不是将元素从一个页面引用到另一个页面,更好的做法是保持松散耦合 . 这可以通过一个messenger插件来完成,该插件将一个事件从一个页面发送到另一个页面,这可以为您提供有关您想要执行的操作的说明 . 这样,其他页面只需要监听事件而不是持有强引用 . 为简化某些过程,您可以从实现信使功能的基类继承 .

    这将为您的按钮和 Headers 文本情况提供解决方案,但设置它们超出了此问题的范围 . 根据您的应用程序大小和目标,您可能希望查看有助于设计可维护应用程序的现有框架 . 我建议检查的一个好的Mvvm框架是MvvmCross,它也跨平台并包含messenger plugin .

    祝你的应用好运 .

  • 0

    我找到了解决方案:

    在MainPage中,在SplitView窗格按钮方法中,在Navigate()中添加SplitView引用作为参数:

    private void SlitViewPaneButton_Tapped(object sender, TappedRoutedEventArgs e)
        {
            var frame = contentFrame;
            Page page = frame?.Content as Page;
            if (page?.GetType() != typeof(ChildPage))
            {              
                frame.Navigate(typeof(ChildPage), SplitViewName);
            }
        }
    

    在您的ChildPage.xaml.cs中:

    protected override void OnNavigatedTo(NavigationEventArgs e)
        {
             SplitView sv = new SplitView();
             sv = e.Parameter as NavigateControls;
        }
    

    您现在可以在ChildFrame代码中执行sv.IsPaneOpen = false .

    注意:如果要传递多个控件,请创建一个将这些控件作为变量的类,并使用实例作为参数 .

  • 1

    如上所述,出于几个原因,最好将汉堡包按钮保留在主页面中 . 一个是上面提到的一致性 . 其次,您必须在每个内容页面中重新创建汉堡包按钮,而不是仅在MainPage.xaml中重新创建一次 . 此外,请记住,与SplitView菜单的弹出方式和显示方式有不同的交互方式,如下所示 .

    内联 - 打开菜单窗格时,会将内容推送过来 . 当它关闭时,内容会回到原来的位置

    叠加 - 打开菜单窗格时,它位于内容之上 . 当它关闭时,它是不可见的 .

    压缩覆盖 - 打开菜单窗格时,它位于内容之上 . 当它关闭时,窗格仍然在紧凑模式下可见 .

    紧凑内联 - 打开菜单窗格时,它会将内容推送过来 . 当它关闭时,内容将返回其原始位置,但在紧凑模式下仍然可以看到窗格 .

    您还可以在此处查看SplitView的快速介绍 . http://jamesqquick.com/windows-10-splitview-intro/

相关问题