如何制作包含相同控件的 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 模板的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义控件派生的 TabItem 添加到 WPF 中的 TabControl?

ATL App 中的 TAB 控件背景,XP 样式

通过绑定启用 TabItem

TabLayout tabItem tab重力中心不起作用

TabLayoutMediator 不保留 TabItem 属性

复选框中的 WPF 控件 TabItem 可见性