在ItemsControl中使用TabItem

Coa*_*oat 3 wpf xaml tabcontrol itemscontrol

我正在尝试创建一个TabControl,它接受一个列表并为该列表中的每个元素创建一个TabItem.我想制作一个ItemsControl,然后将面板设置为TabControl会这样做,但它似乎不起作用.反正有没有让这项工作?

fur*_*kle 9

不需要ItemsControl.相反,TabControl具有ItemsSource属性.例如,您可以将其设置为a IEnumerable<string>,并为枚举中的每个项创建一个TabItem.

例如,在XAML中:

<TabControl ItemsSource="{Binding Items}">
</TabControl>
Run Code Online (Sandbox Code Playgroud)

当Items设置为时List<string> { "a", "b", "c" },会生成: 在此输入图像描述

但是,我假设您的主要目标不仅仅是为任何给定的可枚举项中的每个项创建一个空TabItem,因此为了实际填充每个TabItem,您将需要使用TabControl的ContentTemplate属性:

<TabControl ItemsSource="{Binding Items}">
    <TabControl.ContentTemplate>
        <DataTemplate>
            <TextBlock VerticalAlignment="Top" Text="{Binding YourText}"></TextBlock>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>
Run Code Online (Sandbox Code Playgroud)

请注意,ContentTemplate属性从ItemsSource中的任何给定项目获取其DataContext,因此在您自己创建的ItemsSource对象中创建项目会更加容易,您可以在其中将YourText作为属性.我已经使用YourText属性创建了自己的TestClass,并将Items属性更改为包含两个TestClasses的IEnumerable.(第一个是YourText ="第一个标签",第二个是YourText ="第二个标签".)这就是TabControl现在的样子,ItemsSource设置为IEnumerable,ItemsControl.ContentTemplate就位:

在此输入图像描述

这几乎是你可以获得的基本示例,但是可以扩展ControlTemplate但是你认为合适,并且大多数(如果不是所有)控件都可以以相同的方式在那里使用,你通常将它们放在Window或TabItem中.

如果要更改标题,因此它不会显示您的类型名称,请使用TabControl.ItemTemplate属性,方法与上面使用的ControlTemplate类似.

如果你想了解更多,kennyzx提供了以下链接:http://tech.pro/tutorial/1028/wpf-tutorial-binding-to-a-tabcontrol

Panjak Nikam提供了这个:http://tech.pro/tutorial/1028/wpf-tutorial-binding-to-a-tabcontrol