随机主页按钮出现在UWP应用程序中

时间:2018-06-15 13:48:08

标签: c# xaml uwp windows-10-universal

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

enter image description here

更新 经过进一步调查后,我发现了发生的事情。我在后台有一个webview控件,在前视图中有按钮控件。我导航到的网站(vans.co.uk)在左上角有商店标识,当鼠标悬停在它上面时," Home"工具提示出现。但是,如果我在屏幕上的任何位置单击按钮控件,并在单击方法中将该按钮的可见性属性更改为折叠,则此" Home"工具提示出现。单击按钮时折叠按钮时,必须将某种事件传递给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>

xaml.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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这似乎是对vans.co.uk的工作方式以及UWP事件处理的工作方式的综合。简而言之,将按钮折叠起来可以使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处理event bubbling & routed events的方式有关。