我在WPF中设置HighlightBrushKey
SelectedItem
Listbox
时遇到问题。我的目的是根据给定的布尔值设置Item的颜色,位于代码中。
我尝试过以下步骤:
实现转换器,检查布尔值并返回正确的颜色。
示例:
<ribbon:RibbonWindow.Resources>
<l:WindowControl x:Key="ListBoxItemBackgroundConverter" />
<Style x:Key="listBoxStyle" TargetType="{x:Type ListBoxItem}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding Source={x:Static SystemColors.HighlightBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{Binding Source={x:Static SystemColors.ControlBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/>
</Style.Resources>
</Style>
</ribbon:RibbonWindow.Resources>
这里的问题是Convert方法只被调用一次,但每次选择一个项目并检查布尔值时我都需要调用Converter。像触发器一样,但使用“HighlightBrushKey
”。
转换器:
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
if(currentField == null)
return Brushes.Yellow;
if (currentField.Save)
return Brushes.LightGreen;
else
return Brushes.Yellow;
}
我的下一个想法是将“HighlightBrushKey
”设置为“Transparent
”并在代码中手动更改item.Background
。这里的问题是我的物品变白了,无法看到背景颜色
示例:
<ListBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
</ListBox.Resources>
提前致谢! :)
答案 0 :(得分:1)
<Style x:Key="listBoxStyle" TargetType="{x:Type ListBox}">
<Style.Resources>
<!-- Background of selected item when focussed -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
<!-- Background of selected item when not focussed -->
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" />
</Style.Resources>
</Style>
<ListBox Style="{StaticResource listBoxStyle}">
</ListBox>
答案 1 :(得分:0)
如果希望在选择列表框或将鼠标悬停在上方时禁用突出显示,则可以使用以下代码。
<Style TargetType="ListBoxItem" x:Key="ListBoxItemStyle">
<Setter Property="IsSelected" Value="{Binding Content.IsSelected, Mode=TwoWay, RelativeSource={RelativeSource Self}}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ListBox ItemContainerStyle="{StaticResource ListBoxItemStyle}"/>