首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将一个充满控件的模板添加到另一个WPF控件

将一个充满控件的模板添加到另一个WPF控件
EN

Stack Overflow用户
提问于 2013-01-04 20:39:43
回答 4查看 303关注 0票数 2

因此,我一直在从事一个项目,该项目允许我向选项卡控件中添加选项卡,并在每个新的TabItem中添加选项卡。我有一堆以编程方式生成的控件。有没有一种方法可以用XAML创建一个模板,我可以简单地将其添加到新创建的TabItem

举个简单的例子,假设我有一个带有TabPage的WPF表单:

代码语言:javascript
运行
复制
<Window>
 <Grid>
  <TabControl></Tabcontrol>
 </Grid> 
</Window>

我想在我的每个TabPages中添加3个按钮。

代码语言:javascript
运行
复制
<Window>
 <Grid>
  <TabControl>
   <TabItem>
    <Button/>
    <Button/>
    <Button/>
   </TabItem>
  </TabControl>
 </Grid> 
</Window>

我希望能够在XAML编辑器(可能是VS2012)中编辑这个包含3个按钮的模板,这些更改将反映在添加到每个TabItem的模板中。

我到处看了看,大多数WPF模板文章都是关于着色或样式模板的,这似乎不是我想要的。根据我目前的方法,以编程方式添加TabItem是可行的,但会使编辑模板变得更加麻烦,而且我认为,这与WPF的理念相反:将代码从设计中分离出来。

我对WPF比较陌生,但已经看到了它相对于WinForms的力量和优势,所以我在这方面很受欢迎,但因为我是新手,我的术语有时会有点混乱,这也让我的搜索尝试时不时地失败。

任何帮助都将不胜感激。如果我解释得不够好,请告诉我。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-07 19:28:04

正如@Olwaro提到的,您可能想要使用UserControl

在您的示例中,您可以使用这个Xaml创建一个UserControl (其中的用户控件称为ThreeButtonStack,位于名称空间WpfApplication2中):

代码语言:javascript
运行
复制
<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>

然后,您可以在主应用程序中调用它,如下所示:

代码语言:javascript
运行
复制
<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>

结果将是:

票数 1
EN

Stack Overflow用户

发布于 2013-01-07 18:40:17

你应该试着使用UserControl

它将允许您使用-for示例-一组三个按钮作为一个简单的控件。它由xaml文件定义,对此xaml文件所做的更改将反映在添加用户控件的任何位置。

票数 1
EN

Stack Overflow用户

发布于 2013-01-07 19:34:08

TabItem最终继承自ContentControl,,这意味着您可以将其作为模板,以便装饰content控件中显示的实际内容:

代码语言:javascript
运行
复制
<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的样式……

代码语言:javascript
运行
复制
<TabItem>
  <ContentControl Style="{StaticResource CommonButtons}">
    <!-- TabItem Contents -->
  </ContentControl>
</TabItem>

当然,ContentControl位可以以DataTemplate结尾,通过绑定到ItemsSource,您最终可以得到

代码语言:javascript
运行
复制
<TabControl 
   ItemTemplate="{StaticResource CommonButtonsTemplate}" 
   ItemsSource="{Binding MyTabItemsData}" />
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14157382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档