TabControl中所有TabItem的相同内容

时间:2012-12-25 18:31:01

标签: c# .net wpf vb.net xaml

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

<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中使用(不使用代码隐藏)?

3 个答案:

答案 0 :(得分:2)

你可以这样做。在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 :(得分:1)

你可以:

  1. 将内容解压缩为UserControl并在每个TabItem
  2. 中使用它
  3. 创建ControlTemplate并将其应用于每个Control
  4. TabItem的实例
  5. 定义DataTemplate并使用ItemsSource的{​​{1}}将模板应用于每个孩子
  6. 第一种方法可能是最安全的,特别是如果您需要单独访问每个标签页的内容。

答案 2 :(得分:0)

我将<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>

这是最干净,最简单的方法。