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

Posted

技术标签:

【中文标题】如何制作包含相同控件的 TabItem 模板【英文标题】:How to make TabItem template that contains same controls 【发布时间】:2013-05-31 01:13:57 【问题描述】:

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

例如,假设我想制作包含食品类别(肉类、水果、蔬菜等)标签的 TabControl。我可以通过制作带有名称和标题的 TabItems 来单独制作它们。但相反,我只想制作一个像下面这样的并将其用作模板,因为选项卡可能会增加。

<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】:

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

对于有关按名称处理各种子控件的其他问题,这是可以实现的,但更可靠的方法是通过公开依赖属性来使用 WPF 的绑定功能。编写 UserControl 是一项简单的工作,并且有一个工作示例 here

【讨论】:

很长一段时间我都不知道如何制作 UserControl,但我意识到我一直在制作的是 UserControl。从那里开始,一切都走到了一起。谢谢。

以上是关于如何制作包含相同控件的 TabItem 模板的主要内容,如果未能解决你的问题,请参考以下文章