在WPF C#XAML中从tabitem模板创建多个tabitems

时间:2013-09-26 08:31:49

标签: c# wpf xaml styles tabitem

我从MSDN上阅读了很多关于WPF样式和数据模板以及内容模板的教程,但没有成功。 我需要在我的TabControl中制作相同的TabItems并且我手动制作TabItem,我想将其用作Style和ContentTemplate的主机,用于TabControl中的其他TabItem

<TabItem Header="1.semestar">
    <Grid x:Name="GridSemestra">
        <Grid.DataContext>
            <ViewModel:PredmetVM/>
        </Grid.DataContext>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
         <ColumnDefinition MinWidth="100"/>
         <ColumnDefinition MinWidth="30"/>
    </Grid.ColumnDefinitions>


    <Grid.Children>
        <ListBox x:Name="PredmetiLW" Grid.Row="0" BorderThickness="0" Grid.Column="0" ItemsSource="{Binding Predmeti}" HorizontalAlignment="Center" VerticalAlignment="Center" >
             <ListBox.ItemTemplate>
                 <DataTemplate>
                     <TextBlock Text="{Binding Naziv}" />
                 </DataTemplate>
             </ListBox.ItemTemplate>
         </ListBox>
         <ListBox x:Name="RadioLW" Grid.Row="0" Grid.Column="1" BorderThickness="0" ItemsSource="{Binding Predmeti}" HorizontalAlignment="Center" VerticalAlignment="Center" >
             <ListBox.ItemTemplate>
                  <DataTemplate>
                       <TextBlock Text="{Binding Ocjena}"/>
                  </DataTemplate>
             </ListBox.ItemTemplate>
          </ListBox>
          <Label Content="Prosjek Semestra :" HorizontalAlignment="Right" VerticalAlignment="Center" Grid.Row="1" Grid.Column="0" />
          <Label x:Name="_prosjekSemestra"  Grid.Row="1" Grid.Column="1" ContentStringFormat="F2" Content="{Binding _prosjek, Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" />
          <Label Content="Ostvareni ECTS-ovi :" HorizontalAlignment="right" VerticalAlignment="Center" Grid.Row="2" Grid.Column="0" />
          <Label x:Name="_ectsSemestra"  Grid.Row="2" Grid.Column="1" Content="{Binding _ectsovi, Mode=OneWay}"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
      </Grid.Children> 
   </Grid>
</TabItem>

2 个答案:

答案 0 :(得分:3)

如果您希望使用相同模板渲染项目,请为TabControl设置ItemTemplate,如下所示:

 <TabControl ItemsSource="{Binding MyTabItems}">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <Grid x:Name="GridSemestra">
                        <Grid.DataContext>
                            <ViewModel:PredmetVM/>
                        </Grid.DataContext>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition  MinWidth="100"/>
                            <ColumnDefinition  MinWidth="30"/>
                        </Grid.ColumnDefinitions>


                        <Grid.Children>
                            <ListBox x:Name="PredmetiLW" Grid.Row="0" BorderThickness="0" Grid.Column="0" ItemsSource="{Binding Predmeti}" HorizontalAlignment="Center" VerticalAlignment="Center" >
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding Naziv}" />
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                            <ListBox x:Name="RadioLW" Grid.Row="0" Grid.Column="1" BorderThickness="0" ItemsSource="{Binding Predmeti}" HorizontalAlignment="Center" VerticalAlignment="Center" >
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock  Text="{Binding Ocjena}"/>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                            <Label Content="Prosjek Semestra :" HorizontalAlignment="Right" VerticalAlignment="Center" Grid.Row="1" Grid.Column="0" />
                            <Label x:Name="_prosjekSemestra"  Grid.Row="1" Grid.Column="1" ContentStringFormat="F2" Content="{Binding _prosjek, Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                            <Label Content="Ostvareni ECTS-ovi :" HorizontalAlignment="right" VerticalAlignment="Center" Grid.Row="2" Grid.Column="0" />
                            <Label x:Name="_ectsSemestra"  Grid.Row="2" Grid.Column="1" Content="{Binding _ectsovi, Mode=OneWay}"  HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid.Children>


                    </Grid>
                </DataTemplate>
            </TabControl.ItemTemplate>
        </TabControl>

执行此操作,对于属性MyTabItems中的所有项目,将生成TabItems

答案 1 :(得分:3)

这是为任何TabItem定义样式的方法。在示例中,我为Header的{​​{1}}内容创建了白色边框和黑色背景:

TabItem