Windows Phone 8.1 App的常用标题

时间:2014-11-16 16:21:17

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

我正在尝试为我的Windows Phone 8.1应用创建一个公共标题。标题应该在所有页面中都是通用的。我是Windows Phone App Development的新手。任何人都可以提出最好和最干净的方法吗?

1 个答案:

答案 0 :(得分:1)

选项1

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

首先将您的标题创建为UserControl(项目 - >添加新项目 - >用户控件)。然后在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;

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

screenshot

有些观点:

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

选项2

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


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