К этому можно обратиться в XAML с использованием шаблонов данных и / или триггеров. Например, если каждая страница в вашем мастере была представлена в базовой модели как отдельный класс или объект, вы можете использовать один из следующих двух вариантов ... Оба используют ContentControl, который является идеальным элементом управления, когда содержимое будет меняться в значительной степени между различными представлениями одних и тех же данных.
Обратите внимание, что привязки предназначены в качестве примеров псевдокода, просто чтобы передать намерение!
На основе DataTemplate , с использованием разных классов для каждой страницы:
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type WizardPageOne}">
<!-- page 1 layout here -->
</DataTemplate>
<DataTemplate DataType="{x:Type WizardPageTwo}">
<!-- page 2 layout here -->
</DataTemplate>
<!-- ... etc -->
</Grid.Resources>
<ContentControl Content="{Binding CurrentPageModel, Source=Wizardmodel}" />
</Grid>
Или На основе триггера , используя свойство, указывающее текущую страницу:
<ContentControl Content="{Binding WizardModel}">
<ContentControl.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentPageIndex} Value="1">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!-- page 1 layout here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding CurrentPageIndex} Value="2">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<!-- page 2 layout here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<!-- .... etc -->
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
Обе опции загружают элемент управления только для каждой страницы, как это требуется, поэтому у вас не все элементы управления "загружены, но скрыты" в окне.