如何自定义列表框当前所选项目的颜色?

时间:2012-11-20 14:21:55

标签: c# wpf listbox selecteditem

这个问题来自我在stackoverflow中的最后一个问题。自动滚动到特定项目的问题已解决,但现在我想将所选项目背景设置为透明或白色。我怎么能这样做?

更新1

<ListBox ItemsSource="{Binding SomeData}"
         SelectedIndex="{Binding SomeIndex}">
   <ListBox.ItemsPanel>
      <ItemsPanelTemplate>
         <WrapPanel Orientation="Vertical" />
      </ItemsPanelTemplate>
   </ListBox.ItemsPanel>
   <ListBox.ItemTemplate>
      <DataTemplate>
         <SomeChart DataContext="{Binding }" />
      </DataTemplate>
   </ListBox.ItemTemplate>
 </ListBox>

对于这个例子,我需要一种方法来自定义selecteditem颜色。

1 个答案:

答案 0 :(得分:2)

从窗口中的简单列表框开始:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="MainWindow"
    Width="525"
    Height="350">
<Window.DataContext>
    <local:ViewModel />
</Window.DataContext>
<Grid Name="LayoutRoot">
    <ListBox ItemsSource="{Binding Elements}"/>
</Grid>

在ExpressionBlend中选择列表框:

enter image description here

然后在上级菜单中选择“对象”并选择:

enter image description here

这将创建一个新的ListBoxItemStyle,并为新样式创建一个基于原始的ListBoxItem模板。在默认模板中,已经有一些逻辑可以根据触发器和visualstates更改元素的可视化。选择元素时的视觉效果由触发器驱动,您可以修改该触发器以满足您的需求。

选择视图触发器。将有一些由“IsSelected”属性驱动的触发器。在那里,您可以在选择,选择和禁用项目等时更改项目的外观。

enter image description here

只需从现有触发器中选择所需的触发器(例如,“IsSelected = True”),然后使用Blend记录修改模板元素的属性。默认情况下,针对“目标元素”进行了一些属性更改,这意味着模板本身就像“前景”一样。其他人瞄准模板的元素,如Border“Bd”。

当然,您可以从头开始创建ListBoxItemStyle,但如果您只想进行简单的更改,这种方式会更快。