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

WinUI3中如何以编程方式去除GridView首个Item的选中框

WinUI3中如何以编程方式去除GridView首个Item的选中框

这个问题我之前开发WinUI3应用时也碰到过!其实你看到的不是真正的选中框,而是焦点视觉框——毕竟你已经把SelectionMode设为None了,GridView根本不会触发选中状态。出现这个框的原因是:控件加载完成后,WinUI默认会自动把焦点给到第一个可交互的元素,也就是你ItemTemplate里的Button,所以才会显示那个显眼的边框。

下面给你几个亲测有效的解决方法,你可以根据自己的需求选择:

方法一:加载完成后转移焦点

最简单的办法就是在你的DesktopView用户控件加载完成后,把焦点手动转移到控件本身,这样就会移除GridView项的焦点。

先在DesktopView的XAML里绑定Loaded事件:

<UserControl ... Loaded="DesktopView_Loaded">
    <!-- 你的GridView等内容 -->
</UserControl>

然后在后台代码里实现事件处理:

private void DesktopView_Loaded(object sender, RoutedEventArgs e)
{
    // 以编程方式将焦点设置到当前用户控件
    this.Focus(FocusState.Programmatic);
}

方法二:修改GridViewItem的焦点样式

如果你想彻底去掉GridView项的焦点视觉,可以直接修改ItemContainerStyle,禁用或隐藏焦点相关的样式:

在你的UserDesktopGridView里添加ItemContainerStyle:

<customControls:VariableGridView x:Name="UserDesktopGridView" 
                                 IsItemClickEnabled="True" 
                                 Margin="10" 
                                 SelectionMode="None" 
                                 ItemsSource="{x:Bind ResourceCollection, Mode=OneWay}">
    <!-- 保留你原来的ItemsPanel、ItemTemplate等内容 -->
    
    <!-- 添加下面的ItemContainerStyle -->
    <customControls:VariableGridView.ItemContainerStyle>
        <Style TargetType="GridViewItem">
            <!-- 禁止Item成为Tab停靠点,避免自动获取焦点 -->
            <Setter Property="IsTabStop" Value="False"/>
            <!-- 把焦点视觉的画笔设为透明,隐藏边框 -->
            <Setter Property="FocusVisualPrimaryBrush" Value="Transparent"/>
            <Setter Property="FocusVisualSecondaryBrush" Value="Transparent"/>
            <!-- 或者直接关闭系统焦点视觉 -->
            <Setter Property="UseSystemFocusVisuals" Value="False"/>
        </Style>
    </customControls:VariableGridView.ItemContainerStyle>
</customControls:VariableGridView>

方法三:修改Item里的Button属性

因为你的ItemTemplate里用的是Button,它默认是可聚焦的元素,你可以直接给Button设置相关属性,让它不显示焦点框:

在你的Button标签里添加这些属性:

<Button HorizontalAlignment="Center" 
        HorizontalContentAlignment="Stretch" 
        Margin="0 0 0 0" 
        Width="{x:Bind Width, Mode=OneWay}" 
        Height="{x:Bind Height, Mode=OneWay}" 
        Background="Transparent" 
        BorderThickness="0" 
        BorderBrush="Transparent" 
        IsEnabled="{x:Bind Waiting, Mode=OneWay, Converter={StaticResource InverseBooleanConverter}}" 
        Style="{StaticResource WindowsMainMenuButton}" 
        DoubleTapped="{x:Bind LaunchResource}"
        <!-- 添加下面这几个属性 -->
        IsTabStop="False"
        FocusVisualPrimaryBrush="Transparent"
        FocusVisualSecondaryBrush="Transparent">
    <!-- 保留你原来的ToolTip和Grid内容 -->
</Button>

这几种方法都能解决问题,我个人比较推荐方法一或者方法二,前者简单直接,后者能全局控制GridView项的焦点样式,避免后续其他项出现类似问题。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 06:53:11