GridViewRowPresenter鼠标悬停触发器样式覆盖

时间:2016-04-06 13:23:07

标签: c# xaml

我目前正在开发一个在ListView控件中使用GridView的应用程序。

我试图更改所选行上的蓝色悬停/点击效果,到目前为止,无论我尝试过什么,我都无法做到(我尝试过很多东西)

来自app.xaml的相关xaml:

<Style x:Key="{x:Type ListView}" TargetType="ListView">
    <Setter Property="BorderThickness" Value="0" />
</Style>

<Style TargetType="{x:Type GridViewRowPresenter}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Height" Value="20" /> <!-- This actually works here, but I can't change background -->
        </Trigger>
    </Style.Triggers>
</Style>

Xaml listview代码:

<ListView HorizontalAlignment="Left" Height="668" VerticalAlignment="Top" Width="700" Foreground="#BDBDBD" Background="#090909" Name="Results">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView AllowsColumnReorder="False">
            <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}" Width="130"/>
            <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="220"/>
            <GridViewColumn Header="Details" DisplayMemberBinding="{Binding Details}" Width="120"/>
        </GridView>
    </ListView.View>
</ListView>

我真的想学习如何在gridview的模板中更改悬停颜色..而且我到处都是,但没有运气.. PS。我在Windows 7上,但同样的事情也在Windows 8上。

1 个答案:

答案 0 :(得分:0)

不清楚为什么你的第一种方法不起作用(它必须,你正在设置哪种属性?),但无论如何这里是一个有效的方法

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

您可能希望与IsSelected打交道,以区分选定的和未选择的突出显示颜色。然后,您可能希望使用MultiDataTrigger,例如下面的示例删除除选定项目之外的任何内容的高亮显示(仅限边框):

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}"
                   Value="True" />
        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}"
                   Value="False" />
    </MultiDataTrigger.Conditions>
    <Setter Property="Background"
            Value="Transparent" />
</MultiDataTrigger>