2012-06-11 13 views
5

En primer lugar, una captura de pantalla:Windows 8 que muestran los anuncios en la parte superior del menú lateral configuración

ad from main view showing up on settings flyout

El título y la imagen explican bastante bien. Tengo un conjunto de anuncios en el lado derecho de la vista de grupo principal de mi aplicación (muy similar a la plantilla de cuadrícula predeterminada en este ejemplo) y cuando abro mi pantalla Acerca de, el anuncio se filtra.

La pantalla Acerca de es un control de usuario configurado en un SettingsFlyout que tomé prestado de algunas muestras de código entregadas en un dev-camp (abajo).

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; 
    } 
} 

Y, porque sé que se pidió, aquí es la línea de XAML que define el anuncio en mi página:

<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"/> 

Así que, ¿por qué sucede esto, y ¿cómo puedo evitar ¿eso?

sospechas

  1. todavía estoy en Vista previa del consumidor b/c tengo un espectáculo y repite el lunes y no tenía tiempo para trabajar en la migración del sistema operativo en esta caja, sin correr el riesgo de ser no funcional cuando estoy mostrando esto. Como tal, la actualización podría solucionarlo si se trata de un error.

    1.a. Actualización He actualizado a Release Preview y tengo el mismo problema.

  2. ¿Hay alguna técnica de prevención de ad-hidden-but-still-getting-getting en juego aquí? Tal vez piense que estoy tratando de cubrir el anuncio con un elemento ui y aún obtener crédito por su impresión sin que el usuario lo vea. Si es así, ¿cómo administro este caso de uso completamente legítimo?

Spoiler Alert: ZIndex no se establece en ningún lado.

+0

Anuncio sdk para Consumer Preview tiene problemas de espacio aéreo. Lanzamiento de vista previa del anuncio sdk puede solucionarlo, pero no contaría con la respiración. Probablemente tendrá que encontrar una solución mediante la ocultación de avisos, luego aparecerán ventanas emergentes o anuncios flotantes o algo así. – Denis

Respuesta

1

Terminé elaborando un código para escuchar un evento en el menú lateral cuando se cerró para poder mostrar/mostrar los anuncios de forma manual. Es desafortunado que tuve que hacer una solución, pero funciona.

-3

todavía estoy en Vista previa del consumidor b/c tengo un espectáculo y repite el lunes y no tienen tiempo para trabajar en la migración del sistema operativo en esta caja, sin correr el riesgo de ser no funcional cuando estoy mostrando esto Como tal, la actualización puede solucionarlo si se trata de un error.

No he usado ningún anuncio en mis propias aplicaciones de metro todavía, así que no he visto ningún problema como que esto ocurra. Estoy usando Release Preview, y estaba usando Consumer Preview antes del 2 de mayo.

Hubo algunos cambios significativos entre Consumer Preview y Release Preview. Como tal, la actualización puede solucionar esto, o puede romper algo más.

Tendrás que actualizar con el tiempo. Sugeriría probarlo primero antes de intentar resolver el problema.

+0

Tengo toda la intención de actualizar, pero aún no lo he hecho. ¿Has usado un control de anuncios con una ventana emergente que se muestra sobre ella? ¿Se filtra o permanece oculto? –

+0

He hecho una actualización a Release Preview, y todavía es un problema. –

2

Presenta el mismo problema al superponer el AppBar (superior o inferior).Usé los eventos Opened y Closed en la instancia AppBar para ocultar/mostrar el anuncio. Esto significa que AdControl está vinculado a una propiedad de página local en lugar de vincularse directamente a un ViewModel. Como dijiste, es desafortunado pero funciona.

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

Hay una propiedad en AdControl llamado: UseStaticAnchor

Al establecer esta propiedad en true fijará ambos problemas de rendimiento con el desplazamiento, así como el AdControl dibujo en la parte superior de todo lo demás.

Respuesta original - este método se ha quedado desfasado:

El AdControl tiene dos métodos en él: Suspend() y Resume(). Cada vez que abra una ventana emergente o AppBar, querrá llamar al Suspend() y Resume() cuando se cierre de nuevo.

Creo que bajo las sábanas, el AdControl utiliza un WebView para mostrar los anuncios. Por alguna razón, un WebView siempre aparecerá encima de todo lo demás en su aplicación. La solución para esto es desactivar temporalmente el WebView, y en su lugar mostrar un WebViewBrush. (esta técnica se describe aquí: http://msdn.microsoft.com/library/windows/apps/windows.ui.xaml.controls.webviewbrush) Por lo tanto, cuando llama a Suspender() y Reanudar(), AdControl lo está haciendo debajo de las cubiertas.

Lo que he terminado haciendo es crear un UserControl (llamado SuspendingAdControl) que simplemente contiene un AdControl y se puede usar en cualquier lugar de la aplicación. Luego, cada vez que se abre o cierra una ventana, utilizo EventAggregator de Caliburn Micro para publicar un evento. El SuspendingAdControl se suscribirá y manejará estos eventos, y luego llamará al AdControl.Suspend() o Resume().

0

Nada de esto ahora es necesario, ya que el menú desplegable en 8.1 ahora se encuentra en la parte superior del pedido Z.

Cuestiones relacionadas