如何禁用ItemsView中各列表项的鼠标悬停效果?
禁用WinUI 3 ItemsView列表项鼠标悬停变暗效果的方法
ItemsView的列表项悬停变暗效果是由默认ListViewItem模板里的PointerOver视觉状态控制的,你可以通过以下两种方式禁用该效果:
方法一:自定义ItemContainerStyle(仅影响当前ItemsView)
通过重写项容器的ControlTemplate,修改悬停状态的背景设置:
<ItemsView> <ItemsView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListViewItem"> <Border x:Name="Root" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"/> <!-- 重写悬停状态,移除背景变暗效果 --> <VisualState x:Name="PointerOver"> <VisualState.Setters> <!-- 设置为透明,或绑定默认背景保持一致 --> <Setter Target="Root.Background" Value="{TemplateBinding Background}"/> </VisualState.Setters> </VisualState> <VisualState x:Name="Pressed"> <VisualState.Setters> <Setter Target="Root.Background" Value="{ThemeResource ListViewItemPressedBackground}"/> </VisualState.Setters> </VisualState> </VisualStateGroup> <!-- 保留其他必要状态(如选中、禁用等) --> </VisualStateManager.VisualStateGroups> <ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Padding="{TemplateBinding Padding}"/> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </ItemsView.ItemContainerStyle> <!-- 此处添加你的ItemTemplate和数据源配置 --> </ItemsView>
方法二:覆盖主题资源(全局影响同类型控件)
如果希望所有ListViewItem(包括ItemsView的项)都禁用悬停变暗,可以在页面或应用资源中覆盖对应的主题资源:
<Page.Resources> <!-- 将悬停背景设为透明 --> <SolidColorBrush x:Key="ListViewItemPointerOverBackground" Color="Transparent"/> </Page.Resources>
内容的提问来源于stack exchange,提问作者Karmeye
相关产品推荐
相关产品推荐

