voz trucos secretos por phone personalizar ocultos lumia explorar dictado desde codigos asistente archivos windows-phone-7

windows-phone-7 - por - windows 10 mobile trucos y secretos



Cómo manejar el botón Atrás en Windows Phone 7 (3)

En el emulador de Windows Phone 7, cuando se presiona el botón de retroceso de hardware, el comportamiento predeterminado es cerrar su aplicación actual. Quiero anular este comportamiento predeterminado para que navegue a la página anterior en mi aplicación.

Después de algunas investigaciones, parece que debería ser posible hacerlo anulando el método OnBackKeyPress, así:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) { // do some stuff ... // cancel the navigation e.Cancel = true; }

Sin embargo, al hacer clic en el botón Atrás todavía se cierra mi aplicación. Poner un punto de interrupción en el método anterior revela que nunca se llama. Tengo otro punto de interrupción en el código de salida de mi aplicación, y este punto de interrupción se ve afectado.

¿Hay algo más que deba hacer para interceptar el botón Atrás?


Parece que no es posible anular el método OnBackKeyPress para interceptar la tecla Atrás a menos que use el método Navigate para moverse entre páginas en su aplicación.

Mi método previo de navegación era cambiar la raíz visual, como:

App.Current.RootVisual = new MyPage();

Esto significaba que podía mantener todas mis páginas en memoria, así que no necesitaba almacenar en caché los datos almacenados en ellas (algunos de los datos se recopilan en la red).

Ahora parece que necesito usar el método Navigate en el marco de página, que crea una nueva instancia de la página a la que estoy navegando.

(App.Current.RootVisual as PhoneApplicationFrame).Navigate( new Uri("/MyPage.xaml", UriKind.Relative));

Una vez que empecé a navegar utilizando este método, pude anular el manejo del botón de retroceso de la manera descrita en mi pregunta ...


Pude utilizar esta técnica para hacer lo que quería, que es evitar la navegación hacia atrás mientras oculto un control que se desliza dentro y fuera de la ventana. De forma predeterminada, la visibilidad del control está contraída. Los guiones gráficos se utilizan para controlar cuándo se vuelve visible o colapsó. En XAML, dentro del Storyboard:

<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ControlScroller" Storyboard.TargetProperty="(UIElement.Visibility)"> <ObjectAnimationUsingKeyFrames.KeyFrames> <DiscreteObjectKeyFrame KeyTime="00:00:00"> <DiscreteObjectKeyFrame.Value> <Visibility>Visible</Visibility> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames.KeyFrames>

Luego en el código de la página:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) { if(ControlScroller.Visibility == Visibility.Visible && StoryboardHideControlSlider.GetCurrentState() != ClockState.Active) { StoryboardHideControlSlider.Begin(); ContentGrid.IsHitTestVisible = true; e.Cancel = true; } }

Nota: En el guión gráfico que oculta ContentScroller (que es una cuadrícula), KeyTime se establece en "00:00:01" porque quiero que permanezca visible mientras se desliza (y se desvanece) fuera de la vista.

Nota 2: La razón por la cual StoryboardHideControlSlider.GetCurrentState() != ClockState.Active se incluye en la sentencia if es porque si el usuario pulsa el botón Atrás dos veces y el Storyboard no se ha completado, se ejecutará nuevamente. Esto evita que el botón de retroceso cancele la navegación de vuelta a la página anterior. En otras palabras, si el Guión gráfico está activo, el código "sabe" que el usuario ya ha iniciado la ocultación y tiene la intención de volver a la página anterior. (Bueno, al menos ese es el comportamiento que van a obtener ... ¡y no verán la animación dos veces)!


Si no desea el comportamiento predeterminado de la tecla de retroceso, establezca Cancel = true en el parámetro CancelEventArgs en OnBackKeyPress. En mi página, he reemplazado el botón Atrás para cerrar el control de un navegador web en lugar de volver atrás.

protected override void OnBackKeyPress(CancelEventArgs e) { if (Browser.Visibility == Visibility.Visible) { Browser.Visibility = Visibility.Collapsed; e.Cancel = true; } }