在ItemsControl中使用TabItem

4

我正在尝试制作一个TabControl,使用一个列表使每个元素都成为一个TabItem。我想使用ItemsControl并将面板设置为TabControl来完成此操作,但似乎不起作用。有没有办法使它工作?


一个关于WPF中TabControl绑定的例子 - kennyzx
这是您要找的内容吗? http://tech.pro/tutorial/1028/wpf-tutorial-binding-to-a-tabcontrol - Pankaj Nikam
1个回答

12

不需要使用ItemsControl,而是TabControl具有一个ItemsSource属性。您可以将其设置为例如一个 IEnumerable<string>,每个可枚举项都会创建一个TabItem。

例如,在XAML中:

<TabControl ItemsSource="{Binding Items}">
</TabControl>

当Items被设置为List<string> { "a", "b", "c" }时,会产生以下结果:enter image description here

然而,我假设你的主要目的并不只是为了在给定的可枚举项中为每个单独的项目创建一个空的TabItem,因此为了实际填充每个TabItem,您需要使用TabControl的ContentTemplate属性:

<TabControl ItemsSource="{Binding Items}">
    <TabControl.ContentTemplate>
        <DataTemplate>
            <TextBlock VerticalAlignment="Top" Text="{Binding YourText}"></TextBlock>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>
请注意,ContentTemplate属性从ItemsSource中的任何给定项获取其DataContext,因此将项目作为自己创建的对象更容易,其中您可以创建YourText属性。我已创建了一个带有YourText属性的TestClass,并将Items属性更改为包含两个TestClass的IEnumerable。(第一个具有YourText =“first tab”,第二个YourText =“second tab”。)这是TabControl现在的外观,其中ItemsSource设置为IEnumerable,并且ItemsControl.ContentTemplate已放置:
enter image description here
这几乎是您可以获得的最基本的示例,但是ControlTemplate可以按照您的要求进行扩展,并且大多数控件(如果不是所有控件)都可以以同样的方式用于其中,就像您通常会将它们放置在窗口或TabItem中一样。
如果您想要更改标题,以便不会显示您的类型名称,请使用TabControl.ItemTemplate属性以类似于上面使用ControlTemplate的方式。
如果您想了解更多信息,请访问kennyzx提供的链接:http://tech.pro/tutorial/1028/wpf-tutorial-binding-to-a-tabcontrol
和Pankaj Nikam提供的链接:http://tech.pro/tutorial/1028/wpf-tutorial-binding-to-a-tabcontrol

@user2488335 很棒!这是一个美好的感受,使我在结束今晚的时光时感到愉悦。 - furkle
抱歉,我的朋友,但这个解决方案对我不起作用。 - abdou_dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接