2016-08-19 90 views
1

我正在创建一个项目,我想在WPF的TabControl的内容属性中添加按钮。如何动态地将TabControl内容添加为按钮?

我尝试了很多方法,但是失败了。

这是代码实例:

  1. XAML文件
  2. C#文件

1. XAML文件

<TabControl TabStripPlacement="Left" Name="DynamicTab"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 

     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 

     </DataTemplate> 
    </TabControl.ContentTemplate> 

2. C#文件

foreach(DataContextClass glist in groupsList) 
{ 
    TabItem tab = new TabItem(); 
    StackPanel sp = new StackPanel(); 

    tab.Header = glist.ItemGroup; 
    DynamicTab.Items.Add(tab); 
    itemsList = itemsDALObj.ItemsGroupWise(glist.ItemGroup); 
    for(int i =0 ; i<itemsList.Count;i++) 
    { 
     Button b = new Button(); 
     b.Name = "Button" + (i + 1); 
     b.Content = itemsList[i].ItemName; 
     b.Height = 80; 
     b.Width = 100; 
     tab.Content = sp; 
     sp.Children.Add(b); 
    } 
}; 

我尝试以下选项:

  1. 通过在<TabControl.ContentTemplate><DataTemplate>添加的StackPanel,网格,巴顿。
  2. 通过添加动态网格,并在该网格中添加动态按钮。
  3. 其他许多方法我也无法解释。

回答

0

您必须更换XAML而不是<TabControl.ContentTemplate>将其替换为<TabControl.DataContext>这就是我需要几个小时才能找到这个小错误的解决方案。

<TabControl.DataContext> 
    <DataTemplate> 

    </DataTemplate> 
</TabControl.DataContext> 

以上是XAML部分的变化。

0

A TabControl围绕这样的想法设计,即将添加到它的唯一控件是TabItem控件。 实际上,您可以直接将其他控件添加到父对象TabControl,但是当您这样做时,它会自动创建一个隐含的TabItem来保存这些对象。

举例来说,如果你直接添加两个Button控制到TabControl,创建两个隐含的TabItem控件,一个持有各Button

<TabControl> 
    <Button/> 
    <Button/> 
</TabControl> 

这工作,但非常多的错误的方式去关于它。

要正确添加内容到TabControl,请先创建一个TabItem。将您的其他控件添加到TabItem,然后将TabItem添加到TabControl。 (您可以添加TabItemTabControl第一,如果你想,这其实并不重要)

在XAML:

<TabControl> 
    <TabItem Header="This is the label for the tab item."> 
    <Button Content="My Button"/> 
    </TabItem> 
</TabControl> 

在代码中(假设预先存在的TabControl):

 TabItem ti = new TabItem(); 
     ti.Header = "Tab Header Text"; 
     Button bt = new Button(); 
     bt.Content = "Button Text"; 
     ti.Content = bt; 
     myTabControl.Items.Add(ti); 

A TabControl,就像所有的WPF控件都是一个容器。它可以容纳多个对象,但所有这些对象实际上都是TabItem对象。 TabItem控件只能容纳一个对象,所以如果你想要它包含的不仅仅是Button,你必须首先添加一个不同的容器到TabItem;如GridStackPanel

+0

感谢您的回答@Stewbob,但我找到了解决方案。我必须用替换就是这样。 –