首页 > 解决方案 > UWP 应用中出现随机主页按钮

问题描述

不确定是否有人遇到过这个问题,但是每当我单击应用程序中的按钮时,我的 UWP 应用程序上就会出现一个随机的主页按钮。我的应用程序中不存在该按钮,因此我不确定它来自何处。它每次都出现在同一个地方,如果我拖动窗口,它不会随之移动。每次我单击按钮控件时它都会出现,然后在 4-5 秒后消失。

在此处输入图像描述

更新 经过进一步调查,我发现发生了什么。我在后台有一个 webview 控件,在前视图中有一个按钮控件。我导航到的网站(vans.co.uk)在左上角有它的商店标志,当鼠标悬停在它上面时,会出现“主页”工具提示。但是,如果我单击屏幕上任意位置的按钮控件,并在 click 方法中将该按钮的可见性属性更改为折叠,则会出现此“主页”工具提示。当单击按钮折叠时,必须有某种事件传递给 webview。这发生在任何网站上,不仅仅是 vans.co.uk,而且该网站上的徽标以工具提示弹出的方式定位。我写了一个简单的应用程序来重新创建它:

XAML:

<Page
    x:Class="HomeTootipBug.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HomeTootipBug"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <WebView x:Name="webView" Visibility="Visible" DefaultBackgroundColor="White" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
        <Button x:Name="btn" Background="Gray" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="100" Click="btn_Click"></Button>
    </Grid>
</Page>

xml.cs:

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;


namespace HomeTootipBug
{
    public sealed partial class MainPage : Page
    {
        public bool compOut = false;

        public MainPage()
        {
            this.InitializeComponent();
            webView.Navigate(new Uri("https://www.vans.co.uk"));
        }

        private void btn_Click(object sender, RoutedEventArgs e)
        {
            btn.Visibility = Visibility.Collapsed;
            btn.Visibility = Visibility.Visible;
        }
    }
}

标签: c#xamluwpwindows-10-universal

解决方案


这似乎是 vans.co.uk 的工作方式和 UWP 事件处理方式的组合。简而言之,在 click 中折叠按钮可以让 WebView 获得焦点,很可能会提示 vans 网站运行显示 Home 按钮的 JS。

您可以通过将 GotFocus 事件处理程序添加到 WebView 来监视发生的情况。如果您从按钮未折叠的场景开始:

    private void btn_Click(object sender, RoutedEventArgs e)
    {
        //btn.Visibility = Visibility.Collapsed;
        //btn.Visibility = Visibility.Visible;

        Debug.WriteLine("Button Clicked "+ e.OriginalSource.ToString());
    }

    private void WebView_GotFocus(object sender, RoutedEventArgs e)
    {
        Debug.WriteLine("Webview got focus");
    }

单击按钮几次后,您可以看到以下调试输出:

Button Clicked Windows.UI.Xaml.Controls.Button
Button Clicked Windows.UI.Xaml.Controls.Button
Button Clicked Windows.UI.Xaml.Controls.Button
Button Clicked Windows.UI.Xaml.Controls.Button
Button Clicked Windows.UI.Xaml.Controls.Button

现在,如果您从代码中删除注释,启用折叠:

    private void btn_Click(object sender, RoutedEventArgs e)
    {
        btn.Visibility = Visibility.Collapsed;
        btn.Visibility = Visibility.Visible;

        Debug.WriteLine("Button Clicked "+ e.OriginalSource.ToString());
    }

    private void WebView_GotFocus(object sender, RoutedEventArgs e)
    {
        Debug.WriteLine("Webview got focus");
    }

单击几下后,您可以在调试控制台中看到以下输出:

Button Clicked Windows.UI.Xaml.Controls.Button
Webview got focus
Webview got focus
Button Clicked Windows.UI.Xaml.Controls.Button
Webview got focus
Webview got focus
Button Clicked Windows.UI.Xaml.Controls.Button
Webview got focus

这很可能与 UWP 如何处理事件冒泡和路由事件有关。


推荐阅读