可能有更好的方法可以做到这一点,但这里有:我对用户工作流程的每一步都有一个用户控件。我正在使用Microsoft Prism和依赖注入。我有一个绑定到List的ItemsControl。每当用户执行需要下一个“步骤”的操作时,我都会将用户控件添加到ItemsControl绑定到的列表中。
当然,用户从上到下控制堆叠在彼此之上。我想要的是让最后一个绘制在每个其他人之上。这样当用户完成此步骤并点击“确定”时,我只需删除用户控件,就会自动显示上一步。
答案 0 :(得分:0)
我按照HighCore的想法创建了一个制表符控件。
<TabControl Name="MIPTabs" ItemsSource="{Binding UCList}" HorizontalAlignment="Left" VerticalAlignment="Top" Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=Height}" Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=Width}">
UCList中的每个项目都是UserControl,其内容会自动添加到每个新标签中。然后我隐藏了标签:
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
然后我使用以下代码,以便每次添加选项卡时,它会将所选选项卡设置为等于最新选项卡:
public MIP(IMIPVM viewModel) : this()
{
this.DataContext = viewModel;
var dpd = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(TabControl));
if (dpd != null)
{
dpd.AddValueChanged(MIPTabs, UpdateTabs);
}
}
private void UpdateTabs(object sender, EventArgs e)
{
var view = CollectionViewSource.GetDefaultView(MIPTabs.ItemsSource);
view.CollectionChanged += (o, f) =>
{
//This makes it so the last item ADDED is always the tab that is being displayed
MIPTabs.SelectedIndex = MIPTabs.Items.Count-1;
};
}