سؤال

أقوم ببناء تطبيق مرتبط GPS يعرض الإحداثيات من بين الحسابات الأخرى. الكود التجريبي الخاص بي هو الإعداد لإطلاق الأحداث كل ثانية.

كلما قمت بتحديث واجهة المستخدم الصفحة الرئيسية (على سبيل المثال ، مربع نص مع خط العرض المحسوب) ، فإنه يعمل بشكل جيد.

المشكلة هي إذا حاولت "نفض الغبار" من جانب إلى الجانب الآخر ، لتغيير الصفحة. أثناء إجراء "النقر" ، إذا كان مربع النص هو التحديث ، فإنه يقفز الصفحة الرئيسية مرة أخرى إلى العرض.

نوع من الصعوبة في التوضيح في النص بدون فيديو. لكن تخيل Click-N-Holding ، وقم بالتشجيع على الشاشة البانورامية قليلاً-على سبيل المثال ، لإلقاء نظرة خاطفة على الصفحة التالية ولكن لم تقلب بعد. حسنًا ، إذا كان مربع النص سيتم تحديثه خلال تلك الفترة ، فستفقدك نقرة ماوسك ، وسوف تقفز إلى الصفحة الرئيسية.

بمجرد الوصول إلى الصفحة التالية ، يبقى ويمكنني رؤية التحديث الفائض من الصفحة السابقة. لا صفقة كبيرة هناك. لكنها تحاول فقط الوصول إلى تلك الصفحة التالية.

أنا جديد على WP7/Silverlight ، لذلك كنت أحاول استخدام المرسل لجعل الأمور أكثر استجابة. بغض النظر عن ما أقوم به (باستخدام المرسل أم لا) ، يحدث هذا دائمًا. لذلك ، أعتقد أن هذا له علاقة مع واجهة المستخدم التي يتم تحديثها.

رمز صغير يساعد دائمًا:

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;

}

عند تحديث أي من مربعات النص هذه ، تعود الشاشة إلى الصفحة الرئيسية. نوع من تجربة سيئة.

ربما هذا طبيعي؟ هل هناك حدث لتوصيله لمعرفة أن المستخدم يحاول "الانزلاق" إلى الصفحة التالية؟

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

حسنًا ، هذا يبدو وكأنه اختراق. لكنني حصلت على التأخير الذي أردته من خلال التثبيت في بعض الأحداث. إذا كانت هناك أحداث أخرى يجب أن أستخدمها (مثل Mousedown/Mouseup) ، فأخبرني بذلك. مرة أخرى ، هذا هو الاختراق ولكن يعمل.

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

كل ما علي فعله الآن هو التحقق من منطق IschangingPage في الكود الخاص بي. ونقلها إلى الأحداث ، إلخ.

نصائح أخرى

أعتقد ذلك عندما تقوم بتعيين .Text على كل هذه الكائنات مباشرة ، يتلقون التركيز (أو شيء مشابه.)

حاول استخدام DataBinding لتعيين القيم.
أقوم بذلك بنجاح لتحديث نص عناصر التحكم على panoramaitems التي ليست معروضة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top