Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Задание другого цвета фона для ListBoxItem / 2 сообщений из 2, страница 1 из 1
18.12.2011, 00:07
    #37581434
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задание другого цвета фона для ListBoxItem
задался целью изменить цвет выделения в ListBox`е.
Задал стиль
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<ListBox  Name="list1">
   <ListBox.ItemContainerStyle>
       <Style TargetType="{x:Type ListBoxItem}">
          <Style.Triggers>
             <Trigger Property="IsSelected" Value="True">
                  <Setter Property="Foreground" Value="Green"/>
                  <Setter Property="Background" Value = "Red"/>
             </Trigger>
          </Style.Triggers>
       </Style>
   <ListBox.ItemContainerStyle>
   <ListBoxItem>Item1</ListBoxItem>
   <ListBoxItem>Item2</ListBoxItem>
   <ListBoxItem>Item3</ListBoxItem>
   <ListBoxItem>Item4</ListBoxItem>
</ListBox>


Foreground меняется, а Background ни в какую. Покопался выяснил, что самы надежный способ изменить поведение это заменить шаблон ControlTemplate для ListBoxItem. Но когда стал рассматривать шаблон по умолчанию, то увидел, что в нем уже обрабатывается триггер на изменение свойтва IsSelected. Вот кусок
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  <ControlTemplate.Triggers>
    <Trigger Property="Selector.IsSelected">
      <Setter Property="Panel.Background" TargetName="Bd">
        <Setter.Value>
          <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" />
        </Setter.Value>
      </Setter>
      <Setter Property="TextElement.Foreground">
        <Setter.Value>
          <DynamicResource ResourceKey="{x:Static SystemColors.HighlightTextBrushKey}" />
        </Setter.Value>
      </Setter>
      <Trigger.Value>
        <s:Boolean>True</s:Boolean>
      </Trigger.Value>
    </Trigger>
...
  </ControlTemplate.Triggers>


Как видно здесь тоже задаются и Background и Foreground, тем не менее в первом стиле изменяется только Foreground, а Background первым способом изменить не получиться никак.
Почему ? Чем таким особенным является Background ?
У других элементов Background, как правило, меняется без проблем в триггере стиля.

Нашел еще один способ изменить цвет выделения:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        <ListBox Name="list1" >
            <ListBox.Resources>
                <LinearGradientBrush x:Key ="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1">
                    <GradientStop Offset="0" Color="Azure"></GradientStop>
                    <GradientStop Offset="1" Color="Blue"></GradientStop>
                </LinearGradientBrush>
            </ListBox.Resources>
            <ListBoxItem>Item1</ListBoxItem>
            <ListBoxItem>Item2</ListBoxItem>
            <ListBoxItem>Item3</ListBoxItem>
            <ListBoxItem>Item4</ListBoxItem>
            <ListBoxItem>Item5</ListBoxItem>
        </ListBox>


Я так понял что здесь просто перекрыт глобальный ресурс локальным ?
Еще вопрос: в триггере ControlTemplate указываются свойства таким способом "Selector.IsSelected" или "Panel.Background". А почему они задаются именно так ? Ведь Selector и Panel абстрактные классы. Что эти записи означают ?
...
Рейтинг: 0 / 0
19.12.2011, 22:35
    #37584027
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задание другого цвета фона для ListBoxItem
thunder2,

Что неужели никто такие штуки не делал ?
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Задание другого цвета фона для ListBoxItem / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]