我正在开发一个项目,我希望在WPF中的TabControl的内容属性中添加按钮。
我尝试了很多方法,但我失败了。
这是代码示例:
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);
}
};
我尝试了以下选项:
<DataTemplate>
{/ 1}}的{{1}}中添加了stackpanel,Grid,Button
答案 0 :(得分:0)
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);
与所有WPF控件一样,TabControl
是一个容器。它可以容纳多个对象,但所有这些对象实际上都是TabItem
个对象。 TabItem
控件只能容纳一个对象,因此如果您希望它包含的不仅仅是Button
,则必须先向TabItem
添加一个不同的容器;比如Grid
或StackPanel
。
答案 1 :(得分:0)
您必须替换为XAML
而不是<TabControl.ContentTemplate>
将其替换为<TabControl.DataContext>
,这就是解决这个小错误所需的解决方案。
<TabControl.DataContext>
<DataTemplate>
</DataTemplate>
</TabControl.DataContext>
以上是XAML部分的变化。