Выбранный элемент теряет стиль при перемещении фокуса в WPF ListBox - программирование
Подтвердить что ты не робот

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

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

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

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

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

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

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

Спасибо заранее!

4b9b3361

Ответ 1

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

Ответ 2

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