Microsoft の Surface テーブル用のアプリケーションを作成しています。画面 (ウィンドウまたはページ) 間を移動する必要があります。SurfaceSDK は NavigationWindow に似たものを提供しますか? そうでない場合、どうすれば画面間を移動できますか?
3 に答える
SDK はこれらのコントロールの Surface 固有のバージョンを提供していません。これは主に、そのようなナビゲーションが通常 Surface アプリケーションでは適切でないためです。アプリの構築に取り掛かる前に、 Surface ユーザー エクスペリエンス ガイドラインのアドバイスと設計および開発トレーニング ビデオを検討すると、より魅力的なマルチタッチおよびマルチユーザー エクスペリエンスを提供する方法でアプリを構築するきっかけになる場合があります。
私は、アプリケーションのユーザーエクスペリエンスを構築する方法を本当に再考する必要があるというJoshに完全に同意します。
ただし、現在のウィンドウの上に別のウィンドウを開くことができます。異なるウィンドウ間の複雑な相互作用では、これを維持するのは本当に難しいですが...
これは、自分で構築するのはかなり簡単なはずです。最も単純なケースでは、メイン ウィンドウに「画面」をホストするコンテンツ コントロールを配置できます。画面を変更する必要がある場合は、コンテンツ コントロールの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 アーキテクチャでは、通常、コンテンツをビューモデルのプロパティにバインドし、ビューモデルに表示する「画面」を選択させます (たとえば、その画面プロパティを別のビューモデルに設定することにより)。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>