【问题标题】:Common Header for Windows Phone 8.1 AppWindows Phone 8.1 应用程序的通用标头
【发布时间】:2014-11-17 06:52:48
【问题描述】:

我正在尝试为我的 windows phone 8.1 应用程序创建一个通用标题。标题应该在所有页面中通用。我是 Windows Phone 应用程序开发的新手。有人可以建议最好和最干净的方法吗?

【问题讨论】:

    标签: c# xaml user-interface windows-phone-8.1


    【解决方案1】:

    选项 1

    如果您打算将标题用于绝对所有页面而不排除任何页面,则可以将控件放在 Frame 之外。这样,它将在页面导航之间持续存在。

    首先将您的标题创建为用户控件(项目 -> 添加新项目 -> 用户控件)。然后在 App.xaml.cs 中的 Application.OnLaunched() 覆盖(或您创建框架的任何位置)中,替换此行

    // Place the frame in the current Window
    Window.Current.Content = rootFrame;
    

    有了这个

    var grid = new Grid();
    grid.Margin = new Thickness(0, 26, 0, 0);  // compensate for status bar
    grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
    
    var header = new MyHeaderUserControl();
    grid.Children.Add(header);
    
    Grid.SetRow(rootFrame, 1);
    grid.Children.Add(rootFrame);
    
    Window.Current.Content = grid;
    

    现在您的标题将出现在与此类似的所有页面上:

    几点:

    • 我以前从未设计过这样的应用程序,所以我不知道这样做的后果是什么。您不能再假设 Window.Current.Content 将是 Frame(就像很多代码一样)。
    • XAML 设计器不会显示标题。
    • 当 Frame 元素设置为 Window.Current.Content 时(像往常一样),它似乎会自动补偿状态栏的外观。我必须在根网格中添加 26px 的上边距,以便标题显示在状态栏下方。
    • 页面转换由框架提供,由于页眉位于框架之外,因此不会参与页面转换。

    选项 2

    如果你想要更多的灵活性,比如排除某些页面显示页眉或通过数据绑定将页眉的内容更改为某些页面特定的数据,那么我建议你不要更改根框架而是包含页眉手动在您想要的页面中。


    如果您的应用很简单,页面很少,那么第一个选项可能是最简单的,但是如果您的应用很复杂,那么您可能需要后者。就个人而言,我总是会选择后一种选择,只是因为我想要最大的灵活性。

    【讨论】:

    • 感谢您的回复。决定采用第二种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多