Навигация в Microsoft Surface - PullRequest
0 голосов
/ 04 июля 2010

Я пишу приложение для таблицы Microsoft Surface.Мне нужно перемещаться между экранами (Windows или Pages).SurfaceSDK предлагает что-то похожее на NavigationWindow?Если нет, как я могу перемещаться между экранами?

Ответы [ 3 ]

3 голосов
/ 04 июля 2010

SDK не предлагает специфичные для Surface версии этих элементов управления, главным образом потому, что такие навигации обычно не подходят для приложений Surface. Прежде чем углубиться в создание своего приложения, вы можете рассмотреть рекомендации, изложенные в Руководствах по работе с пользователями Surface и обучающих видео по проектированию и разработке , которые могут вдохновить вас на создание своего приложения таким образом, чтобы обеспечивает более привлекательный мультисенсорный и многопользовательский опыт.

0 голосов
/ 22 сентября 2010

Это должно быть довольно легко построить самостоятельно. В простейшем случае ваше главное окно может иметь управление контентом где-то, где размещается ваш «экран». Когда вам нужно изменить экран, просто измените свойство 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 вы, как правило, указали бы содержание, привязанное к свойству в модели представления, и чтобы модель просмотра позаботилась о выборе отображаемого «экрана» (например, установив его свойство экрана для другой модели представления). Привязка команды из пользовательского интерфейса может вызвать изменение экрана, например:

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>
0 голосов
/ 25 июля 2010

Я полностью согласен с Джошем, что вы должны действительно переосмыслить способ создания пользовательского интерфейса вашего приложения.

Но вы можете просто открыть другое окно поверхтекущее окно.Хотя со сложными взаимодействиями между различными окнами это действительно трудно поддерживать ...

...