TabControl中所有tabitem的内容相同

本文关键字:tabitem TabControl | 更新日期: 2023-09-27 17:49:34

我想为TabControl中的所有TabItem显示相同的内容:

<TabControl>
    <TabItem Header="Tab 1">
        <StackPanel>
            <ComboBox />
            <Button Content="Button" x:Name="bButton" />
        </StackPanel>
    </TabItem>
    <TabItem Header="Tab 2" />
    <TabItem Header="Tab 3" />
</TabControl>

是否有一种简单的方法来做到这一点,而不重复代码,只在XAML(不使用代码隐藏)?

TabControl中所有tabitem的内容相同

你可以这样做。在xaml中定义公共资源。

<Window.Resources>
    <StackPanel x:Key="CommonTabContent">
        <ComboBox />
        <Button Content="Button" x:Name="bButton" Click="bButton_Click_1" />
    </StackPanel>
</Window.Resources>

,像

一样使用
<TabControl>
    <TabItem Header="Tab 1" Content="{StaticResource CommonTabContent}"/>
    <TabItem Header="Tab 2" Content="{StaticResource CommonTabContent}" />
    <TabItem Header="Tab 3" Content="{StaticResource CommonTabContent}" />
</TabControl>

你的。cs文件代码将包含这个方法。

private void bButton_Click_1(object sender, RoutedEventArgs e)
{
    // your code
}

你可以:

  1. 将内容提取到UserControl中并在每个TabItem中使用
  2. 创建ControlTemplate并将其应用于每个TabItem中的Control实例
  3. 定义DataTemplate并使用TabControlItemsSource将模板应用于每个子

第一种方法可能是最合理的,特别是当您需要分别访问每个选项卡页面的内容时。

我将<StackPanel>移到<TabControl>之外,并设置空白,使其位于TabControl的顶部:

<TabControl HorizontalAlignment="Left">
    <TabItem Header="Tab 1" />
    <TabItem Header="Tab 2" />
    <TabItem Header="Tab 3" />
</TabControl>
<StackPanel HorizontalAlignment="Left" Margin="5,50,0,0">
    <ComboBox />
    <Button Content="Button" x:Name="bButton" />
</StackPanel>