繁体   English   中英

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

[英]How to customize the color of the currently selected item of a listbox?

这个问题源于我在 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 颜色。

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

<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 中选择列表框:

在此处输入图片说明

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

在此处输入图片说明

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

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

在此处输入图片说明

只需从现有触发器中选择您想要的触发器(例如,“IsSelected = True”)并使用 Blend 记录修改模板元素的属性。 默认情况下,有一些属性更改针对“目标元素”,即模板本身,例如“前景”。 其他目标是模板的元素,如边框“Bd”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM