Windows 8广告显示在设置弹出窗口之上

时间:2012-06-11 01:06:42

标签: windows-8 ads winrt-xaml

首先是截图:

ad from main view showing up on settings flyout

标题和图片很好地解释了它。我的应用主视图组右侧有一个广告设置(非常类似于此示例中的默认网格模板),当我拉出“关于”屏幕时,广告会流下来。

“关于”屏幕是一个设置在InnFlyout上的用户控件,我从一个开发营地(下面)发出的一些代码示例中借用了它。

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我周一有一个show-and-tell,没有时间在这个盒子上迁移操作系统而不会在我显示这个时没有功能。因此,如果它是一个错误,升级可能会修复它。

    1.A。 更新我已升级到Release Preview并遇到同样的问题。

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

5 个答案:

答案 0 :(得分:2)

覆盖AppBar(顶部或底部)会出现同样的问题。我使用Opened实例上的ClosedAppBar个事件来隐藏/显示广告。这意味着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)
    }

答案 1 :(得分:2)

AdControl上有一个名为UseStaticAnchor

的属性

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

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

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

我相信,AdControl使用WebView来展示广告。无论出于何种原因,WebView将始终显示在应用程序中的所有其他内容之上。解决此问题的方法是暂时停用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()

答案 2 :(得分:1)

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

答案 3 :(得分:0)

现在没有必要这样做,因为现在8.1中的弹出按钮位于Z顺序的顶部。

答案 4 :(得分:-3)

  

我仍在使用消费者预览版b / c我周一和周五都有节目告诉   没有时间没有时间在这个盒子上迁移操作系统   当我表现出来时冒着失去功能的风险。因此,   升级可能会修复它,如果它是一个错误。

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

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

你最终必须升级。在你试图解决问题之前,我建议先尝试一下。