1

我在不使用 .itemssource 的情况下使用 foreach 语句以编程方式填充我的列表视图Strings,然后我创建了这个样式触发器(这似乎是正确的)

<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>

然后我运行该项目并单击一个列表视图项......背景是蓝色......

我只是想知道样式触发器是否需要使用数据绑定……或者我的触发器是否错误……或者是否有人有任何想法……???

4

2 回答 2

1

触发器工作正常,但问题是 ListViewItem 的控件模板实际上并没有使用 Background 属性的值作为控件的背景颜色。

相反,它使用 SystemColors.HighlightBrush 属性的值,默认情况下为蓝色(因此它看起来总是像 Windows 中的选择一样)。

该属性有一个与之关联的资源键,因此您可以使用相同的键定义一个新的 Brush,然后 ListView 将使用该键。现在也可以摆脱 Trigger 了。

<ListView.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
</ListView.Resources>
于 2012-10-22T14:30:13.063 回答
1

你的问题和绑定无关,Trigger也是可以的,只是会失效。

所选 ListViewItem 的背景颜色由 ListViewItem 的 ControlTemplate 中的 VisualStateManager 设置,如MSDN 示例中所示:

<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>

不管你设置item的背景是什么值,它都会被设置为{StaticResource SelectedBackgroundColor}item状态为 时的值Selected。但是,您可以将以下行添加到 ListViewItem 样式中以覆盖 SelectedBackgroundColor 资源的值:

<Style TargetType="ListViewItem">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
    </Style.Resources>
    ...
</Style>
于 2012-10-22T14:30:54.000 回答