效果图:
后台代码实现:
项目是用MVVM模式开发:
public List<TabItem> tabItemsList = new List<TabItem>();
public TabControl tabDynamic = null;
tabDynamic = queryControl.GetChildObject<System.Windows.Controls.TabControl>(layOut, "tabDynamic"); //获取TabControl 控件
public void AddTabItem(string uriName)
{
int count = tabItemsList.Count;
// create new tab item
TabItem tab = new TabItem();
tab.Header = string.Format("Tab {0}", uriName.Split('/')[1]);
tab.Name = string.Format("tab{0}", uriName.Split('/')[1]);
tab.HeaderTemplate = tabDynamic.FindResource("TabHeader") as DataTemplate;
//tab.Background = new SolidColorBrush(Colors.Transparent);
//tab.MouseDoubleClick += new MouseButtonEventHandler(tab_MouseDoubleClick);
Uri MainTragetUri = new Uri(string.Format("/Freed.Api.Monitor;component/View/{0}.xaml", uriName), UriKind.RelativeOrAbsolute);
Frame frame = new Frame();
frame.Name = "frameMaim";
frame.NavigationUIVisibility = System.Windows.Navigation.NavigationUIVisibility.Hidden;
frame.JournalOwnership = System.Windows.Navigation.JournalOwnership.UsesParentJournal;
frame.Source = MainTragetUri;
tab.Content = frame;
// insert tab item right before the last (+) tab item
var tabOld = (from t in tabItemsList where t.Name == tab.Name select t).FirstOrDefault();
if (tabOld == null)
{
if (count > 0)
{
tabItemsList.Insert(count - 1, tab);
}
else
{
tabItemsList.Add(tab);
}
tabDynamic.SelectedItem = tab;
}
else
{
tabDynamic.SelectedItem = tabOld;
}
}
XAML代码:
<TabControl Grid.Column="1" Background="Transparent" x:Name="tabDynamic" ItemsSource="{Binding}" Margin="-2,-1,2,1">
<TabControl.Resources>
<DataTemplate x:Key="TabHeader" DataType="TabItem">
<DockPanel>
<Button Name="btnDelete" Command="{Binding DataContext.DeleteTabItemClickCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" DockPanel.Dock="Right" Margin="5,0,0,0" Padding="0" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Name}">
<Image Source="/Images/关闭 (1).png" Height="11" Width="11"></Image>
</Button>
<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=TabItem }, Path=Header}"/>
</DockPanel>
</DataTemplate>
</TabControl.Resources>
</TabControl>
量的积累,才会有质的飞越!