2012-04-28 15 views
11

¿Hay alguna forma de responder a Snap en C# en una aplicación de Metro? Cuando una de las páginas está ajustada, necesito mostrar otra. Mi idea es responder a la instantánea pasando a otra página.Cómo responder mediante programación a Snap en Windows 8 Metro

He encontrado

var currentView = ApplicationLayout.GetForCurrentView(); 
currentView.LayoutChanged += new TypedEventHandler<ApplicationLayout, ApplicationLayoutChangedEventArgs>(currentView_LayoutChanged); 

pero parece que ya no funciona en Vista previa del consumidor. ¿Hay otra manera?

+2

Esto se cubre bien en el ejemplo de Snap: http://code.msdn.microsoft.com/windowsapps/Snap-Sample-2dc21ee3 –

+0

La respuesta aceptada está desactualizada a partir de la Vista previa de la versión. –

Respuesta

5

En la Vista previa del consumidor, debe reaccionar a un evento diferente. Ahora es ViewStateChanged, no LayoutChanged.

+6

Esta respuesta no está actualizada. Eche un vistazo a mi publicación a continuación para la Vista previa de la versión – Jowen

+1

para ser justo, no está mal PARA LA VISTA PREVIA AL CONSUMIDOR, que son las tres primeras palabras de la respuesta. No es correcto para la versión actual, pero eso no es lo mismo que estar equivocado. –

+1

para ser justos, nadie dijo que es incorrecto ... simplemente obsoleto :) – Jowen

24

En vista previa de la versión debe reaccionar ante un evento diferente, nuevamente :) Ahora se cambia de tamaño, no ViewStateChanged.

Anteriormente, su aplicación podría hacer algo como esto para manejar los cambios de estado de vista:

using Windows.UI.ViewManagement; 

// Register for the viewstatechanged event 
ApplicationView.GetForCurrentView().ViewStateChanged += ViewStateChanged;  

private void ViewStateChanged(ApplicationView sender, ApplicationViewStateChangedEventArgs e) 
{ 
    // Obtain view state from event payload 
    ApplicationViewState myViewState = e.ViewState; 
} 

Ahora Apps deben hacer esto:

using Windows.UI.ViewManagement; 

// Register for the window resize event 
Window.Current.SizeChanged += WindowSizeChanged;  

private void WindowSizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) 
{ 
    // Obtain view state by explicitly querying for it 
    ApplicationViewState myViewState = ApplicationView.Value; 
} 

More info here

+0

¡gracias por eso! – esskar

9

Jowen tenía la respuesta, Sólo estoy añadiendo un poco más para el código WindowSizeChanged aquí:

ApplicationViewState viewState = ApplicationView.Value; 
    if (viewState == ApplicationViewState.Filled) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is Filled"); 
    } 
    else if (viewState == ApplicationViewState.FullScreenLandscape) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is FullScreenLandscape"); 
    } 
    else if (viewState == ApplicationViewState.Snapped) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is Snapped"); 
    } 
    else if (viewState == ApplicationViewState.FullScreenPortrait) 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is FullScreenPortrait"); 
    } 
    else 
    { 
     System.Diagnostics.Debug.WriteLine("viewState is something unexpected"); 
    } 

Lo que me parece un poco sorprendente es que cuando copié este código de marcador de posición en otra página, le daba al código un rectángulo delimitado y, como no tenía "using Windows.UI.ViewManagement"; sin embargo, cuando me moví sobre el código no reconocido, me preguntó "¿Importar el archivo para el código pegado?" Supongo que (no sé si "es" VS o Resharper) está haciendo un seguimiento del código que se ha pegado, ya que se puede ver con una ceja inclinándose en ángulo o en forma de akimbo.

+3

Parece un buen uso para una declaración 'Switch'. –

+0

Cierto, eso sería preferible. –

+1

'ApplicationViewState puede estar alterado o no disponible para lanzamientos después de Windows 8.1. En su lugar, consulta los tamaños de diseño de la ventana directamente. OTRA VEZ DESCUBIERTO. – Jawahar

Cuestiones relacionadas