如何制作包含相同控件的 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?