2016-09-29 71 views
-2

有TabControl,它绑定到数组,需要添加到TabItem不同的图标/图像。 HAML代码:WPF,TabItem图像

<Grid> 
     <TabControl VirtualizingPanel.VirtualizationMode="Recycling" Style="{StaticResource TabControl}" 
     ItemsSource="{Binding Workspaces}" SelectedIndex="{Binding CurrentPage,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"> 
     <TabControl.ItemContainerStyle> 
      <Style BasedOn="{StaticResource TabItem}" TargetType="{x:Type TabItem}"> 
       <Setter Property="Header" Value="{Binding HeaderText}"/> 
      </Style> 
     </TabControl.ItemContainerStyle> 
     <TabControl.ContentTemplate> 
      <DataTemplate> 
       <ContentPresenter Content="{Binding Content}" /> 
      </DataTemplate> 
     </TabControl.ContentTemplate> 
    </TabControl> 
</Grid> 
+1

什么题?你到目前为止尝试了什么?发布您的代码!当你运行它时发生了什么?你预期会发生什么?你有什么特别的问题? – Robert

回答

0

你应该在你的TabControl设置ItemTemplateSelector:

<TabControl VirtualizingPanel.VirtualizationMode="Recycling" Style="{StaticResource TabControl}" 
    ItemsSource="{Binding Workspaces}" SelectedIndex="{Binding CurrentPage,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" 
    ItemTemplateSelector="{StaticResource myItemDataTemplateSelector}" > 

你TemplateSelector应该是这样的:

public class MyItemDataTemplateSelector : DataTemplateSelector 
{ 
    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     FrameworkElement element = container as FrameworkElement; 

     if (element != null && item != null && item is MyItem) 
     { 
      var myItem = item as MyItem; 
      var window = Application.Current.MainWindow; 

      switch (myItem.SpecialFeatures) 
      { 
       case SpecialFeatures.None: 
        return 
         element.FindResource("Item_None_DataTemplate") 
         as DataTemplate; 
       case SpecialFeatures.Color: 
        return 
         element.FindResource("Item_Color_DataTemplate") 
         as DataTemplate; 
      } 
     } 

     return null; 
    } 
} 

参考:https://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemtemplateselector(v=vs.110).aspx