5

首先,截图:

主视图中的广告显示在设置弹出窗口中

标题和图片很好地解释了它。我在我的应用程序主组视图的右侧设置了一个广告(与本示例中的默认网格模板非常相似),当我拉起我的关于屏幕时,广告会流血。

About 屏幕是 SettingsFlyout 上的用户控件集,我从开发营(下)分发的一些代码示例中借用了该控件。

class SettingsFlyout
{
    private const int _width = 346;
    private Popup _popup;

    public void ShowFlyout(UserControl control)
    {
        _popup = new Popup();
        _popup.Closed += OnPopupClosed;
        Window.Current.Activated += OnWindowActivated;
        _popup.IsLightDismissEnabled = true;
        _popup.Width = _width;
        _popup.Height = Window.Current.Bounds.Height;

        control.Width = _width;
        control.Height = Window.Current.Bounds.Height;

        _popup.Child = control;
        _popup.SetValue(Canvas.LeftProperty, Window.Current.Bounds.Width - _width);
        _popup.SetValue(Canvas.TopProperty, 0);
        _popup.IsOpen = true;
    }

    private void OnWindowActivated(object sender, Windows.UI.Core.WindowActivatedEventArgs e)
    {
        if (e.WindowActivationState == Windows.UI.Core.CoreWindowActivationState.Deactivated)
        {
            _popup.IsOpen = false;
        }
    }

    void OnPopupClosed(object sender, object e)
    {
        Window.Current.Activated -= OnWindowActivated;
    }
}

而且,因为我知道它会被要求,所以这是定义我页面上广告的 XAML 行:

<ads:AdControl Visibility="{Binding IsTrial, Source={StaticResource License}, Converter={StaticResource BooleanToVisibilityConverter}}"  Grid.Row="0" Grid.RowSpan="2" x:Name="LandscapeAdControl" ApplicationId="test_client" AdUnitId="Image_160x600" Width="160" Height="600" VerticalAlignment="Center" HorizontalAlignment="Right"/>

那么,为什么会发生这种情况,我该如何预防呢?

怀疑

  1. 我还在 Consumer Preview b/c 上周一我有一个展示和讲述,没有时间在这个盒子上迁移操作系统,而在展示这个时不会冒着无法正常工作的风险。因此,如果它是一个错误,升级可能会修复它。

    1.a. 更新我已经升级到 Release Preview 并且有同样的问题。

  2. 这里有一些花哨的广告隐藏但仍然获得印象的预防技术吗?也许它认为我试图用一个 ui 元素覆盖广告,并且在用户看到它的情况下仍然获得它的印象。如果是这样,我该如何管理这个完全合法的用例?

剧透警报:ZIndex 未在任何地方设置。

4

5 回答 5

2

它与覆盖AppBar(顶部或底部)存在相同的问题。我使用实例上的OpenedandClosed事件AppBar来隐藏/显示广告。这意味着 AdControl 绑定到本地页面属性,而不是直接绑定到 ViewModel。就像你说的,这很不幸,但它确实有效。

    private void bottomAppBar_Opened(object sender, object e)
    {
        if (App.ViewModel.IsTrialVisibility == Visibility.Visible)
            this.DefaultViewModel["AdVisibility"] = Visibility.Collapsed;
        // else do nothing as we don't want to show it since it's not a trial
    }

    private void bottomAppBar_Closed(object sender, object e)
    {
        if(App.ViewModel.IsTrialVisibility == Visibility.Visible)
            this.DefaultViewModel["AdVisibility"] = Visibility.Visible;
        // else do nothing as it's not shown in the first place (not a trial)
    }
于 2012-10-07T14:13:19.633 回答
2

AdControl在命名上有一个属性:UseStaticAnchor

将此属性设置为 true 将解决滚动的性能问题以及AdControl其他所有内容之上的绘图问题。

原始答案 - 此方法现已过时:

AdControl两种方法:Suspend()Resume(). 每当您打开弹出窗口或 AppBar 时,您都会想要调用Suspend(),并Resume()在它再次关闭时调用。

我相信在幕后,AdControl使用 aWebView来显示广告。无论出于何种原因, aWebView将始终显示在应用程序中的所有其他内容之上。解决此问题的方法是暂时禁用WebView,而是显示WebViewBrush. (此技术在此处进行了描述:http: //msdn.microsoft.com/library/windows/apps/windows.ui.xaml.controls.webviewbrush)因此,当您调用 Suspend() 和 Resume() 时,AdControl 正在执行此操作在被子下。

我最终要做的是创建一个 UserControl(名为SuspendingAdControl),它只包含一个 AdControl,可以在应用程序的任何地方使用。然后,每当打开或关闭窗口时,我都会使用 Caliburn Micro 的 EventAggregator 发布事件。SuspendingAdControl 将订阅和处理这些事件,然后适当地调用AdControl.Suspend()Resume()

于 2013-06-04T21:59:49.210 回答
1

我最终制作了一些代码来在弹出窗口关闭时收听事件,这样我就可以手动高/显示广告。不幸的是,我不得不做一个解决方法,但它确实有效。

于 2012-07-23T19:47:22.290 回答
0

现在这些都不是必需的,因为 8.1 中的弹出窗口现在位于 Z 顺序的顶部。

于 2013-11-02T12:52:31.477 回答
-3

我还在 Consumer Preview b/c 上周一我有一个展示和讲述,没有时间在这个盒子上迁移操作系统,而在展示这个时不会冒着无法正常工作的风险。因此,如果它是一个错误,升级可能会修复它。

我还没有在我自己的 Metro 应用程序中使用任何广告,所以我还没有看到任何类似的问题发生。我使用的是 Release Preview,并且在 5 月 2 日之前使用的是 Consumer Preview。

Consumer Preview 和 Release Preview 之间有一些重大变化。因此,升级可能会解决这个问题,或者可能会破坏其他东西。

你最终将不得不升级。我建议在尝试解决问题之前先尝试一下。

于 2012-06-11T13:09:37.377 回答