Сначала попробовал простой подход: Отредактируйте шаблон ListBoxItem, а не поле List. Это элементы, которые отображаются в отключенном состоянии, а не список.
В смеси:
«Редактировать дополнительные шаблоны»> «Редактировать контейнер сгенерированного элемента (ItemContainerStyle)»> Редактировать копию.
В качестве теста я принудительно установил красный цвет фона в отключенном состоянии (см. Рисунок ниже). Цвет фона обычно получается из родительского списка. XAML слишком велик, чтобы перечислять его здесь.
Контейнер элемента в списке состоит из сетки, содержащей 3 прямоугольника (для создания цветовых эффектов границы) и контейнера содержимого для хранения фактического содержимого элемента.
- 1012 * Цвет заливки *
- fillcolor2
- ContentPresenter
- FocusVisualElement
Очевидная проблема ... все пустое пространство под элементами. Ба! Должно быть лучше.
Теперь попробуйте изменить шаблон ListBox:
Чтобы изменить шаблон самого ListBox, я подумал, что вы можете привязать цвет фона прокрутки в шаблоне ListView к свойству IsEnabled элемента управления. Для этого потребуется специальный преобразователь значений (для преобразования IsEnabled bool? В объект Brush), но их довольно просто создать.
TemplateBinding не поддерживает конвертер , но я обнаружил, что вы можете использовать обычное связывание в шаблоне, если вы используете RelativeSource :
<ScrollViewer x:Name="ScrollViewer" BorderBrush="Transparent" BorderThickness="0" Background="{Binding IsEnabled, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource Bool2Color}}" Padding="{TemplateBinding Padding}" TabNavigation="{TemplateBinding TabNavigation}">
Результат выглядел так:
The code for the value convertor is below
public class BoolToColourConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is bool?)
{
return new SolidColorBrush((value as bool?).Value ? Colors.Red : Colors.Orange);
}
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}