2011-03-02 8 views
25

¿Hay una manera de conseguir la instancia activa de la página actual en mi teléfono de Windows 7 aplicación? He estado leyendo documentación y tratando de resolverlo en vano.Como llegar página actual en mi aplicación WP7

En mi ejemplo estoy ejecutando un bucle global que llama a un método público de la página activa.

Por ejemplo, la aplicación se carga a Page1.xaml, si mi ciclo se activa con esta página activada, necesito activar un ciclo encontrado en el código subyacente de Page1. Si Page2 está activo necesitaré activar un método diferente en el archivo de código subyacente de Page2.

NOTA: Mis métodos en las páginas individuales no pueden ser estáticos porque requieren el acceso a las variables de instancia. Así que no solo necesito la página activa (que podría lograrse a través de una variable de algún tipo), sino que necesito la instancia de la página actual.

Respuesta

38

Puede obtener la página actual desde el marco raíz. La clase predeterminada App que se genera en el proyecto tiene una propiedad RootFrame que ya es del tipo PhoneApplicationFrame. El valor de la propiedad Content es la página actual y se puede convertir a PhoneApplicationPage.

var currentPage = ((App)Application.Current).RootFrame.Content as PhoneApplicationPage;

La propiedad RootVisual en la clase Application referencia a la misma imagen, pero es un UIElement, por lo que podría utilizar el siguiente lugar:

var currentPage = ((PhoneApplicationFrame)Application.Current.RootVisual).Content;
+0

Usando esta técnica, cómo habría que proceder a llamar a un método en PhoneApplicationPage? No permite currentPage.myMethod(); – andersra

+1

Puede llamar a los métodos públicos en la página resultante de la misma manera que lo haría con cualquier otra clase. Para llamar a los métodos en su propia página, deberá enviar el resultado a esa clase específica para poder acceder a sus métodos públicos. –

+0

¿Me falta algo aquí? 'var currentPage = ((Aplicación) Application.Current) .RootFrame.Content como PhoneApplicationPage; currentPage = currentPage as Namespace.MyPage; ' – andersra

5

Puede obtener la URL de la página actual usando XAML NavigationService.CurrentSource http://msdn.microsoft.com/en-gb/library/system.windows.navigation.navigationservice.currentsource(v=VS.92).aspx

Sin embargo, para obtener la instancia de la página actual en sí creo que necesita para mantener este mismo - una manera sería para heredar todo sus páginas de una clase abstracta compartida que anula OnNavigatedTo y luego usa esto como una oportunidad para grabarse con un singleton (tal vez su clase de aplicación)

Cuestiones relacionadas