Выбранный элемент теряет стиль, когда фокус перемещается в WPF ListBox - PullRequest
23 голосов
/ 22 сентября 2009

Что у меня есть?

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

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

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

С какой проблемой я столкнулся?

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

Заранее спасибо!

Ответы [ 2 ]

32 голосов
/ 09 сентября 2010

Ответ, на который ссылается , в некоторых случаях решит проблему, но не является идеальным, поскольку он ломается, когда элемент управления отключен / доступен только для чтения, и он также переопределяет цветовые схемы, а не использует их преимущества. Я предлагаю добавить следующее в теги 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

1 голос
/ 23 сентября 2009

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

...