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
相关产品推荐
相关产品推荐

