XAML WPF列表视图:当Focusable设置为false时,设置特定项目的背景颜色

wwtsj6pe  于 2023-05-27  发布在  其他
关注(0)|答案(2)|浏览(174)

基本上,我有一个带有两个条件的ListView:

  • 不要让用户选择任何项目(出于可用性原因)
  • 如果行满足特定条件,则用特殊背景色显示行

做这两点都很容易,但我不能同时做到这两点。下面是一个让解释更简单的例子:

<ListView ItemsSource="{Binding Items}">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Focusable" Value="false"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.Resources>
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsOnline}" Value="false">
                    <Setter Property="Background" Value="LightGray" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListView.Resources>
    [... the rest ...]
</ListView>

如果我删除ListView.ItemContainerStyle部件,背景色将正确绘制。但是当Focusable设置为false时,将Background设置为LightGray没有效果。
有没有一种方法可以同时做到这两点?

wyyhbhjk

wyyhbhjk1#

在当前代码中,实际上设置了两次样式,因此第二个样式声明将被忽略。去掉ItemContainerStyle并将Focusable属性移动到第二个样式中,如下所示:

<ListView ItemsSource="{Binding Items}">
<ListView.Resources>
    <Style TargetType="{x:Type ListViewItem}">
        <Setter Property="Focusable" Value="false" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsOnline}" Value="false">
                <Setter Property="Background" Value="LightGray" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ListView.Resources>
[... the rest ...]
</ListView>
rkttyhzu

rkttyhzu2#

看起来你还需要一个触发器来解决“如果选择”的出现。就像这样:

<Style.Triggers>
    <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}}" Value="True">
        <Setter Property="Background" Value="place a color you want">
    </DataTrigger>
</Style.Triggers>

此外,您可能会发现此讨论也很有用:Change selection-color of WPF ListViewItem

相关问题