You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WPF/XAML中修改ListBoxItem的鼠标悬停样式

解决ListBoxItem鼠标悬停时禁用默认样式的问题

我来帮你搞定这个需求——要让ListBox里的项在鼠标悬停时不显示默认的IsMouseOver样式,核心就是覆盖WPF默认的触发器设置,把悬停状态的属性值和正常状态保持一致就行。你给出的代码已经有了雏形,我来补全并说明细节:

完整实现代码

<ListBox ItemsSource="{Binding ExampleItems}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <!-- 先设置你的基础样式 -->
            <Setter Property="Background" Value="Red" />
            <Setter Property="BorderBrush" Value="Blue" />
            <Setter Property="BorderThickness" Value="1" />
            <Setter Property="Padding" Value="4" />
            <Setter Property="Foreground" Value="Black" />

            <!-- 覆盖默认的IsMouseOver触发器 -->
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <!-- 这里设置和基础样式完全一致的属性,就不会有悬停变化了 -->
                    <Setter Property="Background" Value="Red" />
                    <Setter Property="BorderBrush" Value="Blue" />
                    <!-- 如果想要悬停时完全透明,也可以改成Value="Transparent" -->
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>

    <!-- 可选:添加你的ItemTemplate -->
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

原理说明

WPF的ListBoxItem默认样式里内置了IsMouseOver触发器,会自动把背景改成浅蓝、边框变色来反馈悬停状态。我们在自定义样式里重新定义这个触发器,把属性值强制设置成和正常状态一样,就能抵消默认的样式变化。

如果需要更彻底的定制(比如连选中样式也一起改),可以考虑重写ListBoxItem的ControlTemplate,但上面的触发器方法是最简洁直接的,适合快速实现你的需求。

内容的提问来源于stack exchange,提问作者Tristan Trainer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:31:08