2016-08-19 2 views
1

Я работаю над проектом, где я хочу добавить кнопку в свойстве содержимого TabControl в WPF.Как добавить содержимое 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. С # Файл

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. Добавляя StackPanel, Сетка, кнопки в <DataTemplate> из <TabControl.ContentTemplate>.
  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. (Вы можете добавить TabItem к TabControl первых, если вы хотите, это на самом деле не имеет значения)

В 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; как Grid или StackPanel.

+0

Спасибо за ответ @Stewbob, но я нашел решение. я должен заменить на Thats it. –

Смежные вопросы