最近在WPF项目遇到了需要使用标签页展示一些子页面的需求,搜索之后发现了TabControl控件,发现相当好用,于是在此处整理了一套(自认为)相对通用的解决方案。
标签页容器——TabControl简介
首先看微软官方文档,发现TabControl
继承自ItemsControl
,意味着TabControl
中的子项TabItem
可以通过可观测集合ObservableCollection<TabItem>
进行增删,于是我们就把TabItem
作为容器来放置子标签的页面。
xaml中添加TabControl并绑定到可观测集合
<Window
mc:Ignorable="d"
Title="TabConWindow" Height="450" Width="800">
<Window.DataContext>
<local:TabConViewModel></local:TabConViewModel>
</Window.DataContext>
<Grid>
<TabControl ItemsSource="{Binding TabItems}" >
</TabControl>
</Grid>
</Window>
准备标签页——为UserControl设置DataContext
设置标签页视图——为TabItem
的Content
属性设置UserControl
视图
通过实例化新的TabItem
,并将一个实例化的UserControl
赋值给TabItem
的Content
属性,就实现了将UserControl
的视图绑定到这个新的TabItem
中。
这里我准备了两个UserControl
用来测试
UserControl1.xaml
<UserControl x:Class="TestBed.Views.UserControls.UserControl1"
xmlns:local="clr-namespace:Te