2012-06-11 10 views
5

まず、スクリーンショットをフライアウト。私のアプリのメイングループビュー(この例では、デフォルトのグリッドテンプレートと非常によく似ています)の右側に広告が設定されていて、Aboutスクリーンをプルすると、広告が流出します。のWindows 8広告は

Aboutスクリーンは、DevFinderで配布されたコードサンプルから借りた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. 私はB/C私はショーと-教えて月曜日を持っているとビーイングを危険にさらすことなく、このボックスの上にOSを移行する上で動作する時間を持っていなかった消費者向けプレビューに残っています私がこれを示しているときに機能していない。したがって、バグであればアップグレードによって修正される可能性があります。

    1a。 更新リリースプレビューにアップグレードして同じ問題が発生しました。

  2. ここでは、広告の非表示になっていますが、インプレッション防止のテクニックはありますか?おそらく、私はui要素で広告をカバーしようとしていると思っていますが、ユーザーがそれを見なくてもその印象を信じています。もしそうなら、この正当なユースケースをどうすれば管理できますか?

スポイラー警告:ZIndexはどこにも設定されていません。私はB/C私はショーと-教えて月曜日を持っていると が は、私は時に非機能的であること危険にさらすことなく、このボックスの上にOSを移行する上で動作する時間を持っていなかった消費者向けプレビューに残っています

+0

コンシューマプレビュー用のAd sdkには空域の問題があります。リリースプレビュー広告SDKはそれを修正するかもしれませんが、私は息を止めません。おそらく、広告を隠してポップアップやフライアウトがアクティブなような回避策を見つける必要があります。 – Denis

答えて

1

閉鎖時にフライアウトでイベントを聞くためのコードを作成したので、手動で広告を表示/表示することができました。私は回避策を講じなければならなかったのは残念だが、うまくいく。

-3

これを示しています。したがって、バグの場合は のアップグレードによって修正される可能性があります。

私は自分のメトロアプリケーションで広告をまだ使用していないため、このような問題は発生していません。リリースプレビューを使用していて、5月2日より前にコンシューマープレビューを使用していました。

コンシューマプレビューとリリースプレビューの間にいくつかの重要な変更がありました。したがって、アップグレードによってこれが解決されるか、または別のものが壊れる可能性があります。

あなたは最終的にアップグレードする必要があります。私はあなたが問題を解決しようとする前にまずそれを試すことをお勧めします。

+0

私は完全にアップグレードするつもりですが、私はまだありません。それを上回るポップアップを持つ広告コントロールを使用しましたか?それは出血するか、隠されたままですか? –

+0

私はリリースプレビューへのアップグレードを行っていますが、それでも問題はあります。 –

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のプロパティがあります:このプロパティをtrueに設定UseStaticAnchor

は、スクロールだけでなく、AdControlは、他のすべての上に描画すると、両方のパフォーマンスの問題を修正します。

オリジナルの答えは - このメソッドは現在時代遅れです:Suspend()Resume()

AdControlは、その上に二つの方法があります。 ポップアップウィンドウまたはAppBarを開くときは、いつでも再び閉じるときにSuspend()Resume()を呼び出すことになります。

AdControlは、広告を表示するためにWebViewを使用しています。何らかの理由で、WebViewが常にアプリケーションの他のすべての上に表示されます。この問題を解決するには、WebViewを一時的に無効にし、その代わりにWebViewBrushと表示します。 (このテクニックについては、http://msdn.microsoft.com/library/windows/apps/windows.ui.xaml.controls.webviewbrushで説明しています)したがって、Suspend()とResume()を呼び出すと、AdControlはこれをカバーしています。

私がやったのは、単にAdControlを含むUserControl(SuspendingAdControlという名前)を作成し、アプリ内のどこでも使用できることでした。ウィンドウが開いたり閉じたりするたびに、Caliburn MicroのEventAggregatorを使用してイベントを公開します。 SuspendingAdControlはこれらのイベントを購読して処理し、適切にAdControl.Suspend()またはResume()を呼び出します。

0

現在、8.1のフライアウトがZオーダーの最上部にあるため、これは現在必要ありません。

関連する問題