Ответ 1
Если вы устанавливаете только цвет фона, попробуйте заменить ControlBrush
на ListBox, как этот ответ.
Что у меня есть?
У меня есть ListBox
, заполненный элементами из файла XML. Учитывая свойство DynamicResource
для Style
и написанный триггер для IsSelected
в ItemContainerStyle
.
Что я хочу делать?
Я хочу, чтобы выделенный элемент был выделен даже после того, как фокус переместился из ListBox
.
С какой проблемой сталкиваюсь?
Когда я выбираю элемент, стиль, указанный в IsSelected
, срабатывает. Но, когда я перемещаю фокус из окна списка (нажмите вкладку или нажмите на другой элемент управления), выбранный элемент теряет свой стиль. Есть ли способ сохранить выбранный стиль элемента?
Спасибо заранее!
Если вы устанавливаете только цвет фона, попробуйте заменить ControlBrush
на ListBox, как этот ответ.
Ответ, на который будет дан ответ, в некоторых случаях решает проблему, но не идеален, поскольку он ломается, когда элемент управления отключен /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