如何制作包含相同控件的TabItem模板

时间:2013-05-31 01:13:57

标签: c# wpf xaml templates tabitem

我想制作包含TabItems的TabControl。在TabItem中,我会有StackPanel包含各种控件(ListBox,TextBox,Grid等)。如何制作每个TabItem的模板并制作其中的多个?

例如,假设我想制作包含食物类别(肉类,水果,蔬菜等)标签的TabControl。我可以通过使用Name和Header制作TabItem来单独制作它们。但相反,我想让一个像跟随并使用它作为模板,因为选项卡可以增加。

<TabControl x:Name="TabControl" Margin="3,3,3,3" MinWidth="200">
    <TabItem Name="FoodCategory1">
        <!-- Contents of this does not really matter but its same thing for each "FoodCategory" -->
        <StackPanel>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition MinWidth="20"></ColumnDefinition>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <TextBox x:Name="InputBox" Grid.Column="0" Margin="5,5,5,5"></TextBox>
                <Button x:Name="AddButton" Grid.Column="1" HorizontalAlignment="Right" Margin="0,0,5,0" Width="20" Height="20"></Button>
                <Button x:Name="RemoveButton" Grid.Column="2" HorizontalAlignment="Right" Margin="0,0,5,0" Width="20" Height="20"></Button>
            </Grid>

            <ListBox x:Name="FoodList" Margin="3,3,3,3" MinHeight="40"></ListBox>
        </StackPanel>
        <!-- example end -->
    </TabItem>
</TabControl>

当然,从我的代码回来,我想通过FoodCategoryX.InputBox访问每个tabitems内容,依此类推。 我该怎么做呢?

任何帮助都将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

根据您编写的内容,您可以编写UserControl或CustomControl作为容器,并提供您所追求的视觉效果。这两个中最简单的可能就是UserControl。然后,您将使用控件的实例填充每个TabItem,这使您能够按名称寻址TabItems。

关于通过名称解决各种子控件的其他问题,这是可以实现的,但更强大的方法是通过公开依赖属性来使用WPF的绑定功能。编写UserControl是一项直接的工作,并且有一个工作样本here