ListBox Отключено в Silverlight 4 - PullRequest
       28

ListBox Отключено в Silverlight 4

5 голосов
/ 05 августа 2010

Итак, я стилизую ListBox и попал в ту часть, где мне нужно сделать серый цвет, когда ListBox отключен.Однако, когда я смотрю на вкладку состояний в Blend, присутствуют только состояния проверки - никаких признаков обычных общих состояний, включающих состояние Disabled.

Я попытался создать ванильный проект без пользовательских стилей и только ListBoxи происходит то же самое.У меня вопрос, как мне стилизовать отключенное состояние для ListBox?Я что-то упускаю очевидное ??

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Сначала попробовал простой подход: Отредактируйте шаблон ListBoxItem, а не поле List. Это элементы, которые отображаются в отключенном состоянии, а не список.

В смеси: «Редактировать дополнительные шаблоны»> «Редактировать контейнер сгенерированного элемента (ItemContainerStyle)»> Редактировать копию.

В качестве теста я принудительно установил красный цвет фона в отключенном состоянии (см. Рисунок ниже). Цвет фона обычно получается из родительского списка. XAML слишком велик, чтобы перечислять его здесь.

Контейнер элемента в списке состоит из сетки, содержащей 3 прямоугольника (для создания цветовых эффектов границы) и контейнера содержимого для хранения фактического содержимого элемента.

  • 1012 * Цвет заливки *
  • fillcolor2
  • ContentPresenter
  • FocusVisualElement

Sample output

Очевидная проблема ... все пустое пространство под элементами. Ба! Должно быть лучше.

Теперь попробуйте изменить шаблон 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}">

Результат выглядел так:

alt textalt text

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();
        }
    }
1 голос
/ 16 августа 2010

ListBox является вложенным элементом управления.

Возможно, вам придется стилизовать элемент управления ScrollViewer, содержащий элементы ListBoxItem.

Следующие две ссылки объясняют, как оформить ListBox. Они не являются прямым ответом на ваш вопрос, но могут дать вам некоторое представление о том, как это работает.

http://www.codeproject.com/KB/expression/ListBoxStylingSilverlight.aspx http://www.codeproject.com/KB/expression/ListBoxStylingPart2.aspx
...