2016-08-19 99 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,但我找到了解決方案。我必須用替換就是這樣。 –