Это было немного, хотя ответить: P
Вот так:
Создайте класс с именем LinqToVisualTree.Вы можете найти его в конце этого поста вместе с объяснением того, что он делает.По сути, он позволяет вам запрашивать ваше визуальное дерево через LINQ.
Чтобы добавить что-либо в строку вкладок в TabControl, вам нужно манипулировать TabPanel, которая содержит «кнопки» вкладок.TabPanel находится в пространстве имен System.Windows.Controls.Primitives, поэтому обратитесь к нему.
Самый простой способ получить найденную мной TabPanel - назвать хотя бы один из ваших элементов TabItems и сделать это:
using System.Windows.Controls.Primitives; // Contains TabPanel
using LinqToVisualTree;
void AddPlusButton() {
// Creates a button beside the tabs
var button = new Button()
{
Content = "+",
IsTabStop = false // To prevent keyboard press
};
// Links the Click with the "new tab" function
button.Click += new RoutedEventHandler(btPlus_Click);
// *** HERE IS THE TRICK ***
// Gets the parent TabPanel in the Visual Tree and cast it
var tabpn = tabItem1.Ancestors<TabPanel>().FirstOrDefault() as TabPanel;
// Links the button created
tabpn.Children.Add(button);
}
Вот метод для кнопки плюс:
void btPlus_Click(object sender, RoutedEventArgs e)
{
// Creates a new TabItem
var ti = new TabItem();
ti.Header = "TabAdded";
ti.Content = new TextBlock() { Text = "Tab content!" };
// Links it
tabControl.Items.Add(ti);
}
Вот и все!Совет: я только что узнал о классе TabPanel, используя Silverlight Spy .Ища в Google, я мог бы просто найти способы сделать это, изменив Стиль шаблона с помощью TabControl.
С уважением!