2009-09-22 6 views
21

Что у меня?Выбранный элемент теряет стиль при перемещении фокуса в WPF ListBox

У меня есть ListBox, заполненный элементами из XML-файла. С учетом DynamicResource за Style имущество и письменный триггер для IsSelected в ItemContainerStyle.

Что я хочу делать?

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

С какой проблемой сталкиваюсь я?

Когда я выбираю элемент, стиль, указанный в IsSelected, срабатывает триггер. Но, когда я перемещаю фокус из окна списка (нажмите вкладку или нажмите на другой элемент управления), выбранный элемент теряет свой стиль. Есть ли способ сохранить стиль выбранного элемента?

Заранее благодарен!

+0

Почему вы убираете мой выбор? – SLaks

+0

К сожалению! это было по ошибке. Сожалею! – Vijay

+0

Привет, Я столкнулся с той же проблемой и попробовал решение, но я не могу решить проблему. Можете ли вы отредактировать сообщение, чтобы оно содержало решение? спасибо – jpsstavares

ответ

1

Если вы только устанавливаете цвет фона, попробуйте заменить ControlBrush на ListBox, согласно this answer.

+1

Хорошо. Позвольте мне попробовать. Благодаря! – Vijay

+1

Это плохая идея - для пользователей, у которых визуальное отображение отключено, это испортит много вещей - полосы прокрутки и кнопки изменятся, чтобы стать текущим цветом выделения (по умолчанию это синий цвет), поэтому ваш внутренний кнопки и полосы прокрутки ListView становятся синими, очень плохо!). – BrainSlugs83

28

Ответ на этот вопрос будет в некоторых случаях решить проблему, но не идеален, поскольку он прерывается, когда элемент управления отключен/readonly, а также перекрывает цветовые схемы, а не использует их. Мое предложение добавить следующее в тегах ListBox:

<ListBox....> 
    <ListBox.Resources> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="ListBoxItem"> 
          <Border Name="Border" Padding="2" SnapsToDevicePixels="true"> 
           <ContentPresenter /> 
          </Border> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsSelected" Value="true"> 
            <Setter TargetName="Border" Property="Background" 
              Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
     </Style> 
    </ListBox.Resources> 
</ListBox> 

Что это будет сделать, это установить цвет выделения фона на элементе блока списка всякий раз, когда он выбран (независимо от состояния управления).

Мой ответ основан на помощь ответы уже даны эти ответы, наряду со следующим блога: http://blogs.vbcity.com/xtab/archive/2009/06/29/9344.aspx

+0

этот подход работает хорошо. благодаря! –

+0

Это должен быть принятый ответ. – Rich

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