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

WinUI3(Windows 10)中如何禁用ListViewItem选中默认视觉提示

移除Windows 10 ListViewItem选中时左侧的蓝色垂直动画

你要移除的是ListViewItem选中状态下左侧的蓝色选择指示器(包含释放鼠标后的动画),当前直接重写ControlTemplate的方式会破坏默认样式(比如圆角),因为默认模板包含了更多布局和样式逻辑。以下是更稳妥的解决方案:

方案1:禁用选择指示器(推荐)

不需要重写完整模板,只需在ListViewItem的样式中关闭选择指示器的显示,就能直接移除蓝色垂直动画,同时保留所有默认样式(包括圆角、hover效果等):

简洁写法

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="SelectionIndicatorVisualEnabled" Value="False"/>
    </Style>
</ListView.ItemContainerStyle>

完整模板继承写法(如需额外自定义其他属性)

如果之后需要调整其他Presenter属性,可基于默认模板的绑定逻辑修改,避免丢失原有样式:

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListViewItem">
                    <ListViewItemPresenter 
                        SelectionIndicatorVisualEnabled="False"
                        ContentTransitions="{TemplateBinding ContentTransitions}"
                        Padding="{TemplateBinding Padding}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        CheckBrush="{TemplateBinding CheckBrush}"
                        CheckBoxBrush="{TemplateBinding CheckBoxBrush}"
                        DragForeground="{TemplateBinding DragForeground}"
                        DragOpacity="{TemplateBinding DragOpacity}"
                        DragBackground="{TemplateBinding DragBackground}"
                        DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}"
                        FocusBorderBrush="{TemplateBinding FocusBorderBrush}"
                        FocusVisualMargin="{TemplateBinding FocusVisualMargin}"
                        FocusSecondaryBorderBrush="{TemplateBinding FocusSecondaryBorderBrush}"
                        PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackground}"
                        PointerOverBackground="{TemplateBinding PointerOverBackground}"
                        PointerOverForeground="{TemplateBinding PointerOverForeground}"
                        SelectedBackground="{TemplateBinding SelectedBackground}"
                        SelectedForeground="{TemplateBinding SelectedForeground}"
                        SelectedPointerOverBackground="{TemplateBinding SelectedPointerOverBackground}"
                        PressedBackground="{TemplateBinding PressedBackground}"
                        SelectedPressedBackground="{TemplateBinding SelectedPressedBackground}"
                        />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ListView.ItemContainerStyle>

原有方案的问题分析

你直接替换了ControlTemplate为仅包含ListViewItemPresenter,但没有继承原模板中的关键绑定(比如控制圆角的CornerRadius、布局内边距等),同时硬编码背景属性破坏了原有状态逻辑(比如选中、hover的默认样式切换),导致丢失了系统默认的UI细节。

补充提示

如果需要自定义选中状态的背景,不要直接硬编码资源,而是通过修改SelectedBackground等依赖属性,或者基于默认样式进行扩展,这样能保证UI复杂度提升时,样式逻辑依然和系统默认行为保持一致,避免出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:51:09