1

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

 <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 的样式与用户选择它们时相同?

4

1 回答 1

2

只有当ListBox它有用户焦点时才会突出显示蓝色,否则它会使用不同的画笔

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

因此,您可以将 设置SystemColors.InactiveSelectionHighlightBrushKeySystemColors.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>
于 2013-04-26T10:41:07.990 回答