【问题标题】:Creating multiple tabitems from tabitem template in WPF C# XAML在 WPF C# XAML 中从 tabitem 模板创建多个 tabitem
【发布时间】:2013-10-02 02:55:24
【问题描述】:

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

<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>

【问题讨论】:

  • 在这个例子中究竟什么是固定的,什么是可变的?我的意思是,实例之间会发生什么变化,模板中应该有什么?
  • @meilke deviantpics.com/images/2013/09/26/ask.png 红色的属性只会改变,我想在创建 tabitem 实例时设置它们

标签: c# wpf xaml styles tabitem


【解决方案1】:

如果您希望您的项目使用相同的模板呈现,请为您的 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

【讨论】:

  • 嗯谢谢,可能我误解了你,但我不想创建新属性 MyTabItems 然后绑定到它,我只想在 Xaml 中减少(停止)复制/粘贴相同代码的 6x TabItems除了 TabItem 的 Header 属性和 ItemsSource 的子属性之外,它的外观和行为都相似。
【解决方案2】:

这是您为任何TabItem 定义样式的方式。在示例中,我为TabItemHeader 内容创建了一个白色边框和一个黑色背景:

<Style TargetType="{x:Type TabItem}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type TabItem}">

        <Border BorderBrush="White" BorderThickness="5" Margin="2">
          <Grid Width="100" Height="100" Background="Black">
            <ContentPresenter x:Name="ContentSite"
                              VerticalAlignment="Center"
                              HorizontalAlignment="Center"
                              ContentSource="Header"
                              RecognizesAccessKey="True"/>
          </Grid>
        </Border>

      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

【讨论】:

  • 如何为该控件模板中的每个 ItemTab 设置标题?原因 不起作用,因为这个 tabitem 从模板继承了 header 属性?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多