我正在尝试制作一个TabControl,使用一个列表使每个元素都成为一个TabItem。我想使用ItemsControl并将面板设置为TabControl来完成此操作,但似乎不起作用。有没有办法使它工作?
我正在尝试制作一个TabControl,使用一个列表使每个元素都成为一个TabItem。我想使用ItemsControl并将面板设置为TabControl来完成此操作,但似乎不起作用。有没有办法使它工作?
不需要使用ItemsControl,而是TabControl具有一个ItemsSource属性。您可以将其设置为例如一个 IEnumerable<string>
,每个可枚举项都会创建一个TabItem。
例如,在XAML中:
<TabControl ItemsSource="{Binding Items}">
</TabControl>
当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>
请注意,ContentTemplate属性从ItemsSource中的任何给定项获取其DataContext,因此将项目作为自己创建的对象更容易,其中您可以创建YourText属性。我已创建了一个带有YourText属性的TestClass,并将Items属性更改为包含两个TestClass的IEnumerable。(第一个具有YourText =“first tab”,第二个YourText =“second tab”。)这是TabControl现在的外观,其中ItemsSource设置为IEnumerable,并且ItemsControl.ContentTemplate已放置: