2011-06-10 38 views

回答

1

这是一个有点虽然回答:P

这里有云:

创建一个名为LinqToVisualTree类。你可以在this post的末尾找到它,并解释它的功能。基本上,它可以让你通过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); 
} 

而已!提示:我刚刚了解到使用Silverlight Spy的TabPanel类。在Google上搜索,我可以通过从TabControl中更改模板样式来找到这样做的方法。

此致敬礼!

+1

感谢您的回复。你正在使用第三方工具,但不喜欢这样做。你能告诉别的方法吗? – Ash 2011-06-11 12:12:04

+0

实际上,尽管LinqToVisualTree是第三方,但它仅仅是类[VisualTreeHelper]的一个“外壳”(http://msdn.microsoft.com/pt-br/library/system.windows.media.visualtreehelper.aspx) ,提供扩展方法来完成这项工作。 您可以直接使用VisualTreeHelper,但我认为使用扩展方法更容易。 – JwJosefy 2011-06-13 17:29:37

相关问题