如何将ComboBox列表项的整体内容设置为不同颜色?
如何修改ComboBox下拉列表整项的背景色
你当前的代码只给TextBlock设置了背景,所以只有文本区域变色。要让下拉列表的整行都变色,得直接修改下拉项容器(ListBoxItem)的样式,而不是仅修改模板里的文本块。
实现代码
<ComboBox ItemsSource="{Binding Items}" Height="49" Width="84"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Name}"/> </DataTemplate> </ComboBox.ItemTemplate> <!-- 配置下拉项容器样式 --> <ComboBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <!-- 设置默认背景色 --> <Setter Property="Background" Value="Red"/> <!-- 重写模板消除默认内边距,让背景铺满整行 --> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListBoxItem"> <Border Background="{TemplateBinding Background}" Padding="0"> <ContentPresenter/> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </ComboBox.ItemContainerStyle> </ComboBox>
额外说明
如果需要自定义选中、鼠标悬停等状态的背景色,可以在模板里加入VisualStateManager来处理不同状态:
<ControlTemplate TargetType="ListBoxItem"> <Border x:Name="border" Background="{TemplateBinding Background}" Padding="0"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"/> <!-- 鼠标悬停状态 --> <VisualState x:Name="MouseOver"> <Storyboard> <ColorAnimationUsingKeyFrames Storyboard.TargetName="border" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> <EasingColorKeyFrame KeyTime="0" Value="#FFE5F1FB"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState> </VisualStateGroup> <VisualStateGroup x:Name="SelectionStates"> <VisualState x:Name="Unselected"/> <!-- 选中状态 --> <VisualState x:Name="Selected"> <Storyboard> <ColorAnimationUsingKeyFrames Storyboard.TargetName="border" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> <EasingColorKeyFrame KeyTime="0" Value="#FF3399FF"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <ContentPresenter/> </Border> </ControlTemplate>
内容的提问来源于stack exchange,提问作者meJustAndrew
相关产品推荐
相关产品推荐

