WPF 使用 ItemsPanelTemplate 为 ListBox 的选定项设置样式

WPF Style Selected Items of ListBox Using an ItemsPanelTemplate

如何设置此列表框中所选项目的样式?

<ListBox x:Name="AssetTypeListBox" SelectionMode="Multiple">
    <ListBox.ItemsPanel >
        <ItemsPanelTemplate >
             <UniformGrid Columns="6"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel> 
</ListBox> 

我试过了

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#F15025"/>

<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#F15025"/>

但它们似乎并没有像我预期的那样影响所选项目。谢谢

如果您只想更改选区的颜色,那么最简单的方法是将 solidcolorbrush 设置为列表框上的资源:

<ListBox x:Name="AssetTypeListBox" SelectionMode="Multiple">
    <ListBox.Resources>
         <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#F15025"/>
         <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#F15025"/>
    </ListBox.Resources>
    <ListBox.ItemsPanel >
        <ItemsPanelTemplate >
             <UniformGrid Columns="6"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel> 
</ListBox> 

如果您想要自定义列表框中某个项目的选择的样式,例如更改选择颜色或完全重新设计所选项目的外观,您需要查看 ItemContainerStyle 属性.

ItemsPanelTemplate 对此没有影响 - 它只是设置应该布局和显示项目的 ItemsControl 类型 - 例如 StackPanel 或 UniformGrid。

ListBox 的基本层次结构(有点保留)是:

  • 列表框
    • ItemsPanelTemplate(默认为 StackPanel)
      • ItemsContainerStyle(选择突出显示在这里)
        • ItemTemplate(您在这里定义列表项的内容)

此处介绍了 ItemTemplates 和 ItemsContainerStyle 之间的区别: What's the difference between ItemTemplate and ItemContainerStyle in a WPF ListBox?