列表框中所选项目的样式

时间:2013-04-26 10:24:13

标签: wpf xaml listbox

我有一个列表框,它绑定到字符串列表。

 <ListBox Grid.Row="1"
                 Height="130"
                 Background="Black" BorderThickness="0"
                 ItemsSource="{Binding Images}"
                 ItemTemplate="{StaticResource PanoItemTemplate}"
                 SelectedItem="{Binding SelectedImage}">

            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal"
                               Height="110"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
</ListBox>

在VM中我有:

public ObservableCollection<string> Images
{
  get { return _images; }
}

public string SelectedImage
{
  get { return _selectedImage; }
  set
  {
    _selectedImage = value;
    OnPropertyChanged("SelectedImage");
  }
}

当我填充图像列表并通过单击它在列表框中选择其中一个时,我可以在SelectedImage中获取它并且系统运行良好。

当我点击列表框中的某个项目时,它会显示为选中的I ListBox(白色背景上的蓝色)。

如果我将代码中的SelectedImage设置为图像列表中的项目,则在列表中选择该项目,但颜色不同(白色背景上为白色)。

当我通过代码选择它们时,如何更改selectedImage的样式与用户选择它们时相同?

1 个答案:

答案 0 :(得分:2)

ListBox仅在具有用户焦点时突出显示蓝色,否则使用不同的画笔

当ListBox聚焦时,它使用SystemColors.HighlightTextBrushKey,而当未聚焦时,它使用SystemColors.InactiveSelectionHighlightBrushKey

因此,您可以将SystemColors.InactiveSelectionHighlightBrushKey设置为SystemColors.HighlightColor,这会使其保持蓝色和焦点不清。

示例:

<ListBox >
    <ListBox.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>
    </ListBox.Resources>
</ListBox>

编辑:

对于 .NET4.0及更低版本,您可能必须使用SystemColors.ControlBrushKey代替SystemColors.InactiveSelectionHighlightBrushKey

<ListBox >
    <ListBox.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>
    </ListBox.Resources>
</ListBox>