我有一个列表框,它绑定到字符串列表。
<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的样式与用户选择它们时相同?
答案 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>