2012-06-11 89 views
5

首先,截圖:Windows 8的廣告顯示在設置補足彈出

ad from main view showing up on settings flyout

標題和圖像解釋得很好。我在應用的主要羣組視圖的右側放置了廣告(與此示例中的默認網格模板非常相似),當我拉起我的「關於」屏幕時,廣告流血。

「關於」屏幕是在SettingsFlyout上設置的一個用戶控件,我通過在dev-camp(下面)發佈的一些代碼示例中借用。

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. 我仍然在消費者預覽版B/C我有一個展示和告訴星期一和沒有時間來對這個盒子遷移操作系統中使用,而不用擔心存在當我顯示這個時,這個功能不起作用。因此,升級可能會修復它,如果它是一個錯誤。

    1.a. 更新我已升級到發佈預覽並具有相同的問題。

  2. 在這裏玩還有一些奇特的隱藏但仍然得到印象的預防技術嗎?也許它認爲我正在嘗試用ui元素來覆蓋廣告,並且在用戶看不到它的情況下仍然可以得到它的印象。如果是這樣,我該如何管理這個完全合法的用例?

尾翼警報:Z-索引未設置任何地方。

+0

Consumer Preview的廣告sdk確實有空域問題。發佈預覽廣告SDK可以解決它,但我不會屏住呼吸。您可能必須通過隱藏廣告來找到解決方法,然後彈出窗口或彈出窗口處於活動狀態或類似的狀態。 – Denis

回答

1

我最終創建了一些代碼,以便在關閉時在彈出窗口上收聽活動,這樣我就可以手動高/展示廣告。不幸的是,我不得不做一個解決方法,但它的工作原理。

-3

我仍然在消費者預覽版B/C我有一個展示和告訴星期一和 沒有時間來遷移此框的OS工作,而 冒着被非功能性的,當我顯示這一點。因此, 升級可能會修復它,如果它是一個錯誤。

我還沒有在我自己的地鐵應用程序中使用任何廣告,所以我沒有看到任何問題發生。我正在使用Release Preview,並在5月2日之前使用Consumer Preview。

Consumer Preview和Release Preview之間有一些重大變化。因此,升級可能會解決這個問題,否則它可能會破壞其他事情。

你將不得不升級。我建議先嚐試一下,然後再嘗試解決問題。

+0

我完全打算升級,但我還沒有。您是否使用了一個廣告控件,並在彈出窗口顯示過度廣告?它會流血還是保持隱藏? –

+0

我已經完成了Release Preview的升級,但仍然是一個問題。 –

2

它提出覆蓋AppBar(頂部或底部)相同的問題。我使用AppBar實例上的OpenedClosed事件來隱藏/顯示廣告。這意味着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) 
    } 
2

有一個名爲上AdControl屬性:UseStaticAnchor

這個屬性設置爲true,將解決這兩個性能問題的滾動,還有AdControl在一切之上繪製。

原來的答覆 - 這種方法現在已經過時:

AdControl上有兩種方法:Suspend()Resume()。 每當您打開一個彈出式窗口或應用程序欄時,您需要在再次關閉時撥打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()

0

這些都不是必需的,因爲現在8.1中的彈出窗口位於Z順序的頂部。