如何在uwp中单击microsoft广告时获取事件

如何在uwp中单击microsoft广告时获取事件,uwp,windows-store-apps,uwp-xaml,ads,Uwp,Windows Store Apps,Uwp Xaml,Ads,我正在为xaml使用Microsoft广告SDK。我的应用程序现在可以显示广告了。但我想知道用户点击广告时的事件 以下事件均无效 <ads:AdControl x:Name="adAd" Grid.Row="3" ApplicationId="" AdUnitId="" Width="300" Height="250" AdRefreshed="OnAdRefreshed" ErrorOccurred="OnErrorOccurred"

我正在为xaml使用Microsoft广告SDK。我的应用程序现在可以显示广告了。但我想知道用户点击广告时的事件

以下事件均无效

    <ads:AdControl x:Name="adAd" Grid.Row="3" ApplicationId="" AdUnitId=""
         Width="300" Height="250" AdRefreshed="OnAdRefreshed" 
         ErrorOccurred="OnErrorOccurred"
         Tapped="OnAdTapped" OnPointerDown="OnAdPointerDown" 
         PointerPressed="OnAdPointerPressed"/>

以下事件均无效

    <ads:AdControl x:Name="adAd" Grid.Row="3" ApplicationId="" AdUnitId=""
         Width="300" Height="250" AdRefreshed="OnAdRefreshed" 
         ErrorOccurred="OnErrorOccurred"
         Tapped="OnAdTapped" OnPointerDown="OnAdPointerDown" 
         PointerPressed="OnAdPointerPressed"/>
实际上,您不能直接使用上述事件,因为它将被显示在广告
WebView
中的超链接单击忽略。

如果您想检测
AdControl
的点击事件,您可以使用一些间接的方式,使用
visualtreeheloper
来获取广告
WebView
,并收听它的
导航开始
事件

public static T MyFindListBoxChildOfType<T>(DependencyObject root) where T : class
{
    var MyQueue = new Queue<DependencyObject>();
    MyQueue.Enqueue(root);
    while (MyQueue.Count > 0)
    {
        DependencyObject current = MyQueue.Dequeue();
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(current); i++)
        {
            var child = VisualTreeHelper.GetChild(current, i);
            var typedChild = child as T;
            if (typedChild != null)
            {
                return typedChild;
            }
            MyQueue.Enqueue(child);
        }
    }
    return null;
}


private void AdTest_AdRefreshed(object sender, RoutedEventArgs e)
{
    var ADWebView = MyFindListBoxChildOfType<WebView>(AdTest);
    ADWebView.NavigationStarting += ADWebView_NavigationStarting;
}

private void ADWebView_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
    System.Diagnostics.Debug.WriteLine("AD clicked---------------");
}

应该有用。我不明白为什么代码示例中的3个事件“未工作”。未工作是指当我单击广告时,点击的事件OnPointerDown、PointerPressed不会触发。IsEngagedChanged也没有开火。嗨@Vincent我编辑了答案请检查。在搜索了所有文档之后,到目前为止,这几乎是最好的答案,尽管仍然存在一些小问题。尽管这是一个“解决方案”,但它过于复杂,而OP主要是寻找单个事件处理程序。如果我们不得不求助于这个代码样板来处理一次单击,那么UWP可能存在一些潜在的问题。