如何突出显示IsSelected的行

时间:2012-12-31 18:45:59

标签: wpf xaml listview background itemcontainerstyle

我想从我的ListView中选择时突出显示该行,但我无法让它工作。任何人都可以看看我有什么,告诉我我做错了什么?另一个问题是如何在我的ViewModel中拥有一个属性并根据bool值设置Background颜色,如何实现?

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="Green" />
            </Trigger>

            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Yellow" />
            </Trigger>
        </Style.Triggers>
    </Style>
</ListView.ItemContainerStyle>

3 个答案:

答案 0 :(得分:3)

这里的问题是ListView的项目模板自动添加了刷子类型SystemColors.HighlightBrushKey的“选定的突出显示” - “真正的解决方案”将覆盖项目模板定义,但是一种方式你可以得到你在这里的东西是这样的:

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green"/>
        </Style.Resources>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Yellow" />
            </Trigger>
        </Style.Triggers>
    </Style>
</ListView.ItemContainerStyle>

答案 1 :(得分:0)

您可以使用名为IValueConverter的接口将Bool值绑定到Color画笔。

以下是相关帖子:What is best practise for IValueConverter?

答案 2 :(得分:0)

            <ListView  Name="listBox1" ItemsSource="{Binding Path=SimpleList}"
                      HorizontalAlignment="Left" VerticalAlignment="Top" Background="Olive">
                <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <EventSetter Event="MouseEnter" Handler="listBox1_ListBoxItem_MouseEnter"/>
                        <EventSetter Event="MouseLeave" Handler="listBox1_ListBoxItem_MouseLeave"/>
                        <Style.Resources>
                            <!-- Background of selected item when focussed -->
                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                                Color="Green"/>
                            <!-- Background of selected item when not focussed -->
                            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}"
                                Color="Yellow" />
                        </Style.Resources>
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <!--<Setter Property="FontWeight" Value="Bold" />-->
                                <Setter Property="Background" Value="Orange" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </ListView.ItemContainerStyle>
            </ListView>
相关问题