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

WinUI3:如何修改ItemsView选中项样式、移除多余线条及自定义容器?

解决方案

1. 移除选中项的多余细线

你看到的选中项右侧和底部细线是ItemsView ItemContainer的默认选中视觉残留。要彻底移除,需重写ItemContainerStyle,覆盖默认的选中状态样式:

<ItemsView>
    <ItemsView.ItemContainerStyle>
        <Style TargetType="ItemContainer">
            <Setter Property="CornerRadius" Value="15"/>
            <Setter Property="Padding" Value="0"/>
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
            <Setter Property="VerticalAlignment" Value="Stretch"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ItemContainer">
                        <Grid>
                            <!-- 保留你原有的布局结构 -->
                            <Border x:Name="CategoryBorder" IsTabStop="False" 
                                    BorderThickness="8" CornerRadius="15" 
                                    BorderBrush="Transparent" 
                                    Background="{Binding BackgroundColor}">
                                <StackPanel IsTabStop="False" Orientation="Vertical" 
                                            Margin="12,10,0,0" VerticalAlignment="Top" 
                                            HorizontalAlignment="Left">
                                    <TextBlock Name="CategoryName" Text="{Binding Name}" 
                                               TextWrapping="WrapWholeWords" FontWeight="SemiBold" 
                                               Margin="0,0,10,10" FontSize="16" MaxLines="2"/>
                                </StackPanel>
                            </Border>
                            <!-- 通过视觉状态覆盖默认选中效果 -->
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal"/>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="SelectionStates">
                                    <VisualState x:Name="Unselected"/>
                                    <VisualState x:Name="Selected">
                                        <!-- 清空默认选中的高亮边框,只保留自定义样式 -->
                                        <VisualState.Setters>
                                            <Setter Target="CategoryBorder.BorderBrush" Value="Transparent"/>
                                        </VisualState.Setters>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ItemsView.ItemContainerStyle>
</ItemsView>

2. 自定义悬停与选中样式

完全可以根据需求修改ItemContainer的样式,通过VisualState控制不同状态的UI表现:

  • 悬停状态(PointerOver):在CommonStates的PointerOver视觉状态中,设置悬停时的背景、边框样式,比如修改背景色为浅灰:
    <VisualState x:Name="PointerOver">
        <VisualState.Setters>
            <Setter Target="CategoryBorder.Background" Value="#F5F5F5"/>
        </VisualState.Setters>
    </VisualState>
    
  • 选中状态(Selected):在SelectionStates的Selected视觉状态中,自定义选中时的专属样式,比如替换背景色和边框颜色:
    <VisualState x:Name="Selected">
        <VisualState.Setters>
            <Setter Target="CategoryBorder.Background" Value="#E3F2FD"/>
            <Setter Target="CategoryBorder.BorderBrush" Value="#2196F3"/>
        </VisualState.Setters>
    </VisualState>
    

关键提示

不要直接在ItemContainer标签内嵌套布局,而是通过ItemContainerStyle的ControlTemplate定义结构,这样才能完全接管所有状态的样式渲染,避免默认系统样式干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:56:13