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