Pregunta

Estoy construyendo una aplicación relacionada con GPS que muestra las coordenadas entre otros cálculos. Mi código de demostración está configurado para disparar los eventos cada segundo.

Siempre que actualizar la página principal de la interfaz de usuario (por ejemplo, un cuadro de texto con la latitud calculado), que trabaja muy bien.

El problema es que si trato de "película" de un lado hacia el otro lado, para cambiar la página. Mientras que en el proceso de "parpadeo", si el cuadro de texto fue de actualización, se salta la parte posterior página principal a la vista.

Un poco difícil de explicar en texto sin un video. Pero imaginar Click-N-explotación, y arrastrando la pantalla panorámica sólo un poco - por ejemplo, dar un vistazo a la página siguiente, pero no voltear todavía. Bueno, si el cuadro de texto era poner al día durante ese tiempo, usted pierde su clic del ratón espera, y sería saltar de nuevo a la página principal.

Una vez que se deje a la página siguiente, se queda y puedo ver la puesta al día de desbordamiento de la página anterior. No es gran cosa allí. Pero sólo está tratando de llegar a la página siguiente.

Soy nuevo en WP7 / Silverlight, por lo que he estado tratando de utilizar el despachador para hacer las cosas más sensible. No importa lo que hago (con el despachador o no), esto ocurre siempre. Por lo tanto, estoy adivinando que esto tiene que ver con la interfaz de usuario se actualiza.

Un poco de código siempre ayuda:

void GeoWatcher_PositionChanged(object sender,
    GeoPositionChangedEventArgs<GeoCoordinate> e)
{
    Deployment.Current.Dispatcher.BeginInvoke(() => MyPositionChanged(e));
}
void MyPositionChanged(GeoPositionChangedEventArgs<GeoCoordinate> e)
{
    var model = GeoProcessor.GetPosition(e.Position);

    latitude.Text = model.Latitude;
    longitude.Text = model.Longitude;
    altitude.Text = model.Altitude;
    accuracy.Text = model.Accuracy;
    direction.Text = model.Direction;
    speed.Text = model.Speed;
    speedAvg.Text = model.SpeedAvg;

}

Cuando cualquiera de estos cuadros de texto se actualizan, la pantalla "salta" volver a la página principal. Tipo de una mala experiencia.

Tal vez eso es normal? ¿Hay un evento para enganchar en a sabiendas de que el usuario está tratando de "diapositivas" en la página siguiente?

Gracias de antemano.

¿Fue útil?

Solución

Bueno, esto se siente como un truco. Pero tengo el retraso que quería enganchando en algunos eventos. Si hay otros eventos que debería usar (por ejemplo mousedown / mouseup), que me haga saber. De nuevo, esto es un truco, pero funciona.

bool isChangingPage = false;
bool isCompleting = false;

public MainPage()
{
    InitializeComponent();
    this.Loaded += new RoutedEventHandler(MainPage_Loaded);

    this.ManipulationStarted += 
        new EventHandler<ManipulationStartedEventArgs>(MainPage_ManipulationStarted);
    this.ManipulationCompleted += 
        new EventHandler<ManipulationCompletedEventArgs>(MainPage_ManipulationCompleted);
}

void MainPage_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
{
    isChangingPage = true;
}

void MainPage_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
    if (isCompleting)
        return;
    isCompleting = true;

    Deployment.Current.Dispatcher.BeginInvoke(() =>
    {
        Thread.Sleep(1000);
        isChangingPage = false;
        isCompleting = false;
    });
}

Todo lo que tengo que hacer ahora es comprobar el booleano isChangingPage en mi código. Y pasarlo a eventos, etc.

Otros consejos

supongo que cuando se establece .Text en todos aquellos objetos que están recibiendo directamente el foco (o algo similar).

Trate de usar enlace de datos para establecer los valores.
Lo hago con éxito para actualizar el texto de los controles sobre PanoramaItems que no están a la vista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top