2010-10-27 13 views
5

मैं एक जीपीएस से संबंधित अनुप्रयोग का निर्माण कर रहा हूं जो अन्य गणनाओं के बीच निर्देशांक प्रदर्शित करता है। मेरे डेमो कोड हर सेकेंड घटनाओं को आग लगाने के लिए सेटअप है।अद्यतन करते समय WP7 पैनोरामिक पृष्ठ वापस क्यों कूदता है?

जब भी मैं मुख्य पृष्ठ यूआई (कहता हूं, गणना अक्षांश वाला टेक्स्टबॉक्स) अद्यतन करता हूं, यह ठीक काम करता है।

समस्या यह है कि यदि मैं पृष्ठ को बदलने के लिए एक तरफ से दूसरी ओर "झटका" करने का प्रयास करता हूं। "फ्लिकिंग" की प्रक्रिया में, यदि टेक्स्टबॉक्स अपडेट करना था, तो यह मुख्य पृष्ठ को वापस देखने में कूदता है।

वीडियो के बिना पाठ में व्याख्या करने के लिए कड़ी मेहनत की तरह। लेकिन क्लिक-एन-होल्डिंग की कल्पना करें, और पैनोरैमिक स्क्रीन को थोड़ा सा ड्रैग करें - कहें, अगले पृष्ठ पर देखने के लिए, लेकिन अभी तक फ़्लिप नहीं करना है। खैर, अगर उस समय टेक्स्टबॉक्स अपडेट करना था, तो आप अपना माउस-क्लिक-होल्ड खो देंगे, और यह मुख्य पृष्ठ पर वापस कूद जाएगा।

एक बार जब आप अगले पृष्ठ पर जाते हैं, तो यह रहता है और मैं पिछले पृष्ठ से ओवरफ़्लो अपडेटिंग देख सकता हूं। वहां कोई बड़ा सौदा नहीं है। लेकिन यह सिर्फ अगले पृष्ठ पर जाने की कोशिश कर रहा है।

मैं 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; 

} 

जब इन बक्सें के किसी भी अपडेट किया जाता है, स्क्रीन वापस मुख्य पृष्ठ पर "कूदता"। एक बुरा अनुभव की तरह।

शायद यह सामान्य है? क्या यह जानने के लिए कोई घटना है कि उपयोगकर्ता अगले पृष्ठ पर "स्लाइड" करने का प्रयास कर रहा है?

अग्रिम धन्यवाद।

उत्तर

1

अच्छा, यह हैक की तरह लगता है। लेकिन मुझे कुछ घटनाओं में शामिल होने से देरी हुई। यदि अन्य घटनाएं हैं जिनका उपयोग करना चाहिए (उदा। 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 बूलियन जाँच है। और आदि, घटनाओं के लिए इसे पारित

1

मुझे लगता है कि होता है कि जब आप उन सभी वस्तुओं पर .Text सेट सीधे वे फोकस प्राप्त कर रहे हैं (या कुछ इसी तरह।)

डेटा बाइंडिंग का उपयोग कर मूल्यों को निर्धारित करने की कोशिश करो।
मैं पैनोरामाइटम पर नियंत्रण के पाठ को अद्यतन करने के लिए सफलतापूर्वक ऐसा करता हूं जो देखने में नहीं हैं।

संबंधित मुद्दे