Этот вопрос очень похож на Изменить WPF DataTemplate ... , который я прочитал и реализовал. Сначала он работал прекрасно, но я столкнулся с проблемой.
Эта проблема заключается в том, что при использовании тем в вашем приложении, таких как темы в проекте WPF Futures (например, Expression Dark), элементы ListBoxItems возвращаются к стилю WPF по умолчанию. Это нарушает тему для этих элементов и, например, создает черный текст на черном фоне, где в противном случае текст будет белым. Это также повлияло на мой TreeView и предположительно повлияло бы на другие подобные элементы управления.
Я думаю, это потому, что для ListBox.ItemContainerStyle устанавливаются конфликтующие стили - один для темы и один для переключения шаблонов данных.
Я искал другие решения, но пока ничего не нашел. Вот какие у меня есть идеи или идеи:
- Подклассы DataTemplateSelector и установка его в ListBox.ItemTemplateSelector. (Текущая лучшая ставка).
- Каким-то образом где-то используется Trigger, DataTrigger или EventTrigger.
- Откажись от темы.
- Каким-то образом взломайте нужную мне функциональность в теме.
- Каким-то образом заставить мой пользовательский ItemContainerStyle каким-то образом унаследовать его цвета и очарование от стиля темы. (Я попробовал это кратко, и это не сработало.)
Вот мой ListBox и связанные части:
<Window.Resources>
<DataTemplate x:Key="NormalTemplate">
...
</DataTemplate>
<DataTemplate x:Key="SelectedTemplate">
...
</DataTemplate>
</Window.Resources>
<ListBox x:Name="RegisterListBox" Grid.Row="0"
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding Adjustments}">
<!-- this is from the post referenced above -->
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="ContentTemplate" Value="{StaticResource NormalTemplate}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource SelectedTemplate}"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Listbox.DataContext устанавливается в коде для включения привязки ItemsSource.
Есть идеи, как мне достичь описанных выше функций, сохраняя при этом полную поддержку тем?