Я не могу найти ответ на свой вопрос где-то. Может быть, вы, ребята, можете мне помочь.WPF TabControl: ItemContainerStyle и ItemTemplateSelector
Я использую WPF и имею TabControl, который использует ItemTemplateSelector. Элемент ItemsSetControl представляет собой ObservableCollection строк. На основе строки выбирается шаблон для TabItem. Пока работает хорошо.
Единственная проблема, с которой я столкнулся сейчас, заключается в том, что я хочу использовать собственный стиль для своих TabItems. Поэтому я попробовал свойство ItemContainerStyle, но это не работает. Когда я устанавливаю ItemContainerStyle, ItemTemplateSelector больше не запускается. Я не использую ContentTemplateSelector, поскольку мне это не нужно в этом решении, так как содержимое вкладок всегда одинаково.
Итак, мой вопрос: как я могу определить стиль TabItems, когда я использую ItemTemplateSelector?
Вот код:
TabControl на UserControl:
<TabControl TabStripPlacement="Right"
ItemsSource="{Binding loadedPalettes, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource StyleTabControl}"
ItemTemplateSelector="{StaticResource TabTemplateSelector}"
Height="Auto"
SelectionChanged="paletteSelectionChanged"
SelectedIndex="{Binding selPaletteIndex}"
Width="Auto"
Margin="0,5,0,0">
<TabControl.ContentTemplate>
<DataTemplate>
<local:tabDataGrid />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
TemplateSelector Класс
Public Class SSITabTemplateSelector
Inherits DataTemplateSelector
Public Overrides Function SelectTemplate(item As Object, container As DependencyObject) As DataTemplate
Dim element As FrameworkElement
element = TryCast(container, FrameworkElement)
If element Is Nothing Then Return Nothing
If container Is Nothing Then Return Nothing
Select Case item
Case "Search"
Return TryCast(element.FindResource("searchTabItem"), DataTemplate)
'Case "TabSwitch"
' Return TryCast(element.FindResource("TextItem"), DataTemplate)
Case Else
Return TryCast(element.FindResource("normalTabItem"), DataTemplate)
End Select
Return Nothing
End Function
End Class
DataTemplates для TabItems
<DataTemplate x:Key="normalTabItem">
<StackPanel Name="Panel"
Orientation="Horizontal">
<TextBlock Text="{Binding}"
Background="Transparent">
<TextBlock.LayoutTransform>
<RotateTransform Angle="270" />
</TextBlock.LayoutTransform>
</TextBlock>
<ContentPresenter x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Content="{Binding Content}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="searchTabItem">
<StackPanel Name="Panel"
Orientation="Horizontal">
<TextBlock Text="blabla"
Background="AliceBlue">
<TextBlock.LayoutTransform>
<RotateTransform Angle="270" />
</TextBlock.LayoutTransform>
</TextBlock>
<ContentPresenter x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Content="{Binding Content}" />
</StackPanel>
</DataTemplate>
ли вы пытались добавить в 'TabControl.Resources' стиля'