在Microsoft Surface中导航

时间:2010-07-03 20:44:27

标签: wpf pixelsense

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

3 个答案:

答案 0 :(得分:3)

SDK没有提供这些控件的Surface特定版本,主要是因为这些导航通常不适合Surface应用程序。在深入构建应用程序之前,您可以考虑Surface User Experience Guidelinesdesign and development training videos中的建议,这可能会激发您构建应用程序,从而提供更具吸引力的多点触控和多用户体验。

答案 1 :(得分:0)

答案 2 :(得分:0)

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

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

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

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

以上用户界面将更改为:

<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>