为什么我的UWP App默认会突出显示鼠标悬停的位置?

问题描述

我不希望应用程序中的元素在被用户悬停时以任何突出显示的方式出现,如下所示:

Highlighting Bad

<ListView>
    <TextBlock FontSize="30" Padding="25,25,25" FontWeight="SemiBold">Inputs</TextBlock>
    <GridView>
        <TextBlock FontSize="24" Padding="25,25">Your Team:</TextBlock>
        <ComboBox ></ComboBox>
    </GridView>
</ListView>

ListView只是Inputs.xaml中的那个

我尝试在App.xaml中为悬停效果编辑这些颜色,但没有产生如下效果:

<Application.Resources>
    <ResourceDictionary>
        <SolidColorBrush x:Key="ListViewItemPointerOverBackgroundThemeBrush" Color="Transparent"/>
        <SolidColorBrush x:Key="ListViewItemCheckHintThemeBrush" Color="Yellow" />
        <SolidColorBrush x:Key="ListViewItemCheckSelectingThemeBrush" Color="Magenta" />
        <SolidColorBrush x:Key="ListViewItemCheckThemeBrush" Color="SpringGreen" />
        <SolidColorBrush x:Key="ListViewItemDragBackgroundThemeBrush" Color="Red" />
        <SolidColorBrush x:Key="ListViewItemDragForegroundThemeBrush" Color="Orange" />
        <SolidColorBrush x:Key="ListViewItemFocusBorderThemeBrush" Color="Blue" />
        <SolidColorBrush x:Key="ListViewItemOverlayBackgroundThemeBrush" Color="LimeGreen" />
        <SolidColorBrush x:Key="ListViewItemOverlayForegroundThemeBrush" Color="ForestGreen" />
        <SolidColorBrush x:Key="ListViewItemOverlaySecondaryForegroundThemeBrush" Color="DodgerBlue"/>
        <SolidColorBrush x:Key="ListViewItemPlaceholderBackgroundThemeBrush" Color="Cyan" />
        <SolidColorBrush x:Key="ListViewItemSelectedBackgroundThemeBrush" Color="Purple" />
        <SolidColorBrush x:Key="ListViewItemSelectedForegroundThemeBrush" Color="White" />
        <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBackgroundThemeBrush" Color="DarkTurquoise" />
        <SolidColorBrush x:Key="ListViewItemSelectedPointerOverBorderThemeBrush" Color="DarkGray" />
    </ResourceDictionary>
</Application.Resources>

这让我发疯了!

解决方法

为什么我的UWP App突出显示默认情况下鼠标悬停的位置?

由于您使用的是ListView和GridView,因此它们在PointerOver状态或选定状态下都设置了不同的外观。如果要在用户悬停时取消任何突出显示,则需要更改ListView和GridView的样式。在ListView和GridView的默认样式中,当触发PointerOver状态时,它们的PointerOverBackground属性和RevealBorderThickness属性将生效。因此,您可以在Application.Resources中更改其值。例如:

<Application.Resources>
    <ResourceDictionary>
        <SolidColorBrush x:Key="ListViewItemBackgroundPointerOver" Color="Transparent"/>
        <Thickness x:Key="ListViewItemRevealBorderThemeThickness">0</Thickness>
        <SolidColorBrush x:Key="GridViewItemBackgroundPointerOver" Color="Transparent"/>
        <Thickness x:Key="GridViewItemRevealBorderThemeThickness">0</Thickness>
    </ResourceDictionary>
</Application.Resources>

但是,ListView和GridView仍处于选定状态,如果您不想选择它们中的任何一项,则可以将其中SelectionMode个设置为None

此外,正如TimTim Wong所说,最好使用StackPanel而不是ListView或GridView来布局控件,它们通常用于显示集合。 StackPanel没有这种状态,您可以直接使用它。例如:

.xaml:

<StackPanel>
    <TextBlock FontSize="30" Padding="25,25,25" FontWeight="SemiBold">Inputs</TextBlock>
    <StackPanel Orientation="Horizontal">
        <TextBlock FontSize="24" Padding="25,25">Your Team:</TextBlock>
        <ComboBox VerticalAlignment="Center"></ComboBox>
    </StackPanel>
</StackPanel>

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...