因此,我一直在从事一个项目,该项目允许我向选项卡控件中添加选项卡,并在每个新的TabItem中添加选项卡。我有一堆以编程方式生成的控件。有没有一种方法可以用XAML创建一个模板,我可以简单地将其添加到新创建的TabItem中
举个简单的例子,假设我有一个带有TabPage的WPF表单:
<Window>
<Grid>
<TabControl></Tabcontrol>
</Grid>
</Window>我想在我的每个TabPages中添加3个按钮。
<Window>
<Grid>
<TabControl>
<TabItem>
<Button/>
<Button/>
<Button/>
</TabItem>
</TabControl>
</Grid>
</Window>我希望能够在XAML编辑器(可能是VS2012)中编辑这个包含3个按钮的模板,这些更改将反映在添加到每个TabItem的模板中。
我到处看了看,大多数WPF模板文章都是关于着色或样式模板的,这似乎不是我想要的。根据我目前的方法,以编程方式添加TabItem是可行的,但会使编辑模板变得更加麻烦,而且我认为,这与WPF的理念相反:将代码从设计中分离出来。
我对WPF比较陌生,但已经看到了它相对于WinForms的力量和优势,所以我在这方面很受欢迎,但因为我是新手,我的术语有时会有点混乱,这也让我的搜索尝试时不时地失败。
任何帮助都将不胜感激。如果我解释得不够好,请告诉我。
发布于 2013-01-07 19:28:04
正如@Olwaro提到的,您可能想要使用UserControl。
在您的示例中,您可以使用这个Xaml创建一个UserControl (其中的用户控件称为ThreeButtonStack,位于名称空间WpfApplication2中):
<UserControl x:Class="WpfApplication2.ThreeButtonStack"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="5" />
<Setter Property="Width" Value="75" />
</Style>
</UserControl.Resources>
<StackPanel Orientation="Horizontal">
<Button Content="OK" />
<Button Content="Cancel" />
<Button Content="Retry" />
</StackPanel>
</UserControl>然后,您可以在主应用程序中调用它,如下所示:
<Window x:Class="WpfApplication2.TabPageWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfApplication2="clr-namespace:WpfApplication2"
Title="TabPageWindow" Height="300" Width="300">
<TabControl>
<TabItem Header="Tab 1">
<DockPanel>
<wpfApplication2:ThreeButtonStack DockPanel.Dock="Bottom" HorizontalAlignment="Right"/>
<TextBlock>Custom Content</TextBlock>
</DockPanel>
</TabItem>
<TabItem Header="Tab 2">
<DockPanel>
<wpfApplication2:ThreeButtonStack DockPanel.Dock="Bottom" HorizontalAlignment="Right"/>
<TextBox>Editing custom stuff</TextBox>
</DockPanel>
</TabItem>
</TabControl>
</Window>结果将是:

发布于 2013-01-07 18:40:17
你应该试着使用UserControl。
它将允许您使用-for示例-一组三个按钮作为一个简单的控件。它由xaml文件定义,对此xaml文件所做的更改将反映在添加用户控件的任何位置。
发布于 2013-01-07 19:34:08
TabItem最终继承自ContentControl,,这意味着您可以将其作为模板,以便装饰content控件中显示的实际内容:
<Style TargetType="TabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ContentPresenter Grid.Row="0" />
<StackPanel Grid.Row=1>
<!-- Your buttons -->
</StackPanel>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>放置ContentPresenter的位置就是放置ContentControl (在本例中为TabItem)内容的位置。
例如,我们已经使用它为集合显示添加了搜索/突出显示功能。您可能希望复制默认模板并从那里进行修改-这是丑陋的部分,因为在模板中实现标记重用相当困难。
或者,让TabItem保持原样,并按照在TabItems中使用的所需方式设置ContentControl的样式……
<TabItem>
<ContentControl Style="{StaticResource CommonButtons}">
<!-- TabItem Contents -->
</ContentControl>
</TabItem>当然,ContentControl位可以以DataTemplate结尾,通过绑定到ItemsSource,您最终可以得到
<TabControl
ItemTemplate="{StaticResource CommonButtonsTemplate}"
ItemsSource="{Binding MyTabItemsData}" />https://stackoverflow.com/questions/14157382
复制相似问题