2013-04-02 2 views
4

У меня есть ListBox, который мне нужно серым, когда он отключен. По запросу пользователя этого недостаточно, чтобы отключить его, но он также должен выглядеть по-другому. shrugs Я смотрел в нескольких других местах и ​​следил за примерами, и кажется, что он должен работать, но это не так. Вот несколько примеров, на которые я смотрел: Example1, Example2.Изменить цвет фона списка на серый

Вот мой код:

<Style x:Key="ListBoxStyle" TargetType="ListBox"> 
<Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBox}"> 
       <ControlTemplate.Triggers> 
         <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="BorderBrush" Value="Black"></Setter> 
         <Setter Property="Foreground" Value="LightGray"></Setter> 
          <Setter Property="Background" Value="LightGray"></Setter> 
         <Setter Property="BorderBrush" Value="LightGray"></Setter> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter>     
</Style> 

Это кажется довольно простым. Я сделал тот же базовый процесс на ComboBox и TextBox с успехом. Может ли кто-нибудь помочь мне увидеть, где мой код неправильный? Пример того, как это сделать правильно, будет замечательным. Первый приведенный выше пример, казалось, был именно тем, что мне нужно, но правильный ответ: «Единственный способ сделать это - переопределить шаблон», который мне не помогает.

Я уже пробовал несколько простых решений. Возможно, какой-то другой стиль может повлиять на это, потому что мы работаем с несколькими разными Словари Ресурса. Кто-нибудь знает, что может быть хорошим способом отслеживать это?

Edit: Я сделал поиск на весь раствор, и единственное место, где ListBox используется мой участок и единственное место, где это время стиль это стиль я установить. В соответствии с MSDN нет «частей» ListBox, поэтому я не могу непреднамеренно стилизовать часть ListBox в процессе стилизации для какого-либо другого элемента управления. Без стилизации, когда я отключу ListBox, он заморожен, но видим без текста и имеет фон по умолчанию. Когда я пытаюсь применить Property = «Background» Value = «LightGray», он кажется скрытым (т. Е. Ничего не видно). Если кто-нибудь знает, почему он может это сделать или как выполнить мою задачу, я буду благодарен за помощь.

ответ

2

Я не думаю, что вам нужно переопределить ControlTemplate, просто добавив Style.Trigger, я работал отлично.

Пример: ответ

<ListBox> 
     <ListBox.Style> 
      <Style TargetType="{x:Type ListBox}"> 
       <Style.Triggers> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="Foreground" Value="LightGray" /> 
         <Setter Property="Background" Value="LightGray" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </ListBox.Style> 
    </ListBox> 
+0

Не работает для меня. Что-то уже должно затрагивать его. У нас есть несколько ресурсных словарей XAML, с которыми мы работаем, чтобы применить различные стили к ComboBox, ScrollViewer, TextBox и т. Д. Я думаю, что в этом случае что-то уже может быть отменено в стиле, который я хочу использовать. – Nallware

+2

Я использовал тот же пример, но его не устанавливал фон в моем ListView. @ sa_ddam123: Не могли бы вы поделиться своим рабочим кодом .. – vinay

+0

Мне нравится этот пример, но он кажется, что он либо перезаписывает любые другие применяемые стили, либо не устанавливает то, что было, когда триггер стиля больше не установлен. – Maslow

10

sa_ddam213 не работал для меня так я думал, я хотел бы добавить, что я нашел я должен был сделать. В моем случае я установил прозрачный фон, но когда я отключил окно, он станет серым. Я хотел иметь возможность контролировать фон списка, когда элемент управления отключен, и вот что я нашел для работы.

примечание: для вашего случая вы хотите изменить прозрачный цвет на любой оттенок серого, который вы хотите.
note2: Это, скорее всего, будет работать, только если вы не изменили шаблон для списка. (изменение таблицы данных в порядке).

<ListBox.Style> 
    <Style TargetType="{x:Type ListBox}"> 
     <Style.Resources> 
      <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/> 
     </Style.Resources> 
    </Style> 
</ListBox.Style> 
+0

Сохраненный мой день на этом .. спасибо :) –

+0

Не работаю для меня тоже. Как только ListBox отключен, он просто белый и ничего больше. Даже исходный фон, установленный для элемента ListBox, исчезает при отключении. – ygoe

Смежные вопросы