0

我正在为 Microsoft 的 Surface 表编写应用程序。我需要在屏幕(Windows 或 Pages)之间导航。SurfaceSDK 是否提供类似于 NavigationWindow 的功能?如果没有,我如何在屏幕之间导航?

4

3 回答 3

3

SDK 不提供这些控件的 Surface 特定版本,主要是因为此类导航通常不适合 Surface 应用程序。在开始构建您的应用程序之前,您可能会考虑Surface 用户体验指南设计和开发培训视频中的建议,它们可能会激发您以提供更引人注目的多点触控和多用户体验的方式构建您的应用程序。

于 2010-07-04T01:00:19.310 回答
0

我完全同意 Josh 的观点,您应该真正重新考虑如何构建应用程序的用户体验。

但是您可以在当前窗口的顶部打开另一个窗口。尽管不同窗口之间存在复杂的交互,但这确实很难维护......

于 2010-07-25T17:56:33.387 回答
0

这应该很容易建立自己。在最简单的情况下,你可以让你的主窗口在某个地方有一个内容控件来托管你的“屏幕”。当需要换屏时,只需Content将 contentcontrol 的属性更改为新屏的内容(可能是用户控件)即可。如果您还想要动画(如屏幕之间的幻灯片转换),您必须做更多的工作,我建议创建一个单独的(用户)控件来处理屏幕更改。

<s:SurfaceWindow .... />
  <Grid x:Name="LayoutRoot">
    <ContentControl x:Name="screenHolder" />
    <s:SurfaceButton Click="changeScreenButton_Click" Content="Change to next screen" />
  </Grid>
</s:SurfaceWindow>

然后要更改屏幕,您可以在点击处理程序中执行以下操作:

screenHolder.Content = new MyNewScreenControl();

在 MVVM 架构中,您通常会将内容绑定到视图模型上的属性,并让视图模型负责选择要显示的“屏幕”(例如,通过将其屏幕属性设置为另一个视图模型)。来自 UI 的命令绑定可以触发屏幕更改,例如:

public ScreenViewModelBase CurrentScreen
{
    get { return _currentScreen; }
    set
    {
        if (_currentScreen != value)
        {
          _currentScreen = value;
          RaisePropertyChanged("CurrentScreen");
        }
    }
}

public ICommand ChangeToNextScreenCommand
{ 
    get { return new RelayCommand(() => CurrentScreen = GetNextScreenFromList()); } 
}

上面的 UI 将更改为:

<s:SurfaceWindow .... />
  <!-- Assuming we have a data context setup which is our viewmodel above -->
  <Grid x:Name="LayoutRoot">
    <ContentControl Content="{Binding CurrentScreen}"/>
    <s:SurfaceButton Command="{Binding ChangeToNextScreen}" Content="Change to next screen" />
  </Grid>
</s:SurfaceWindow>
于 2010-09-22T07:08:46.893 回答