我使用foreach语句以编程方式使用Strings
填充我的listview而不使用.itemssource然后我创建了这个样式触发器(看起来是正确的)
<ListView.Resources>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="True" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</ListView.Resources>
然后我运行项目并单击列表视图项......背景为蓝色........
我只是想知道样式触发器是否需要使用数据绑定...或者如果我的触发器是错误的......或者如果有人有任何想法.. ???
答案 0 :(得分:1)
触发器工作正常,但问题是ListViewItem的控件模板实际上并不使用Background属性的值作为控件的背景颜色。
相反,它使用SystemColors.HighlightBrush属性的值,默认情况下为蓝色(因此它看起来总是像Windows中的选择一样)。
该属性具有与之关联的资源键,因此您可以使用相同的键定义新的Brush,然后由ListView使用该键。现在也可以摆脱触发器。
<ListView.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
</ListView.Resources>
答案 1 :(得分:1)
您的问题与绑定无关,触发器也没问题,除非它无效。
所选ListViewItem的背景颜色由ListViewItem的ControlTemplate中的VisualStateManager设置,如MSDN example中显示:
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border x:Name="Border" Background="Transparent" ...>
<VisualStateManager.VisualStateGroups>
...
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard>
<ColorAnimationUsingKeyFrames
Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource SelectedBackgroundColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
...
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
无论您设置项目的背景值是什么,当项目的状态为{StaticResource SelectedBackgroundColor}
时,它将设置为Selected
的值。但是,您可以将以下行添加到ListViewItem样式以覆盖SelectedBackgroundColor资源的值:
<Style TargetType="ListViewItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
</Style.Resources>
...
</Style>