2012-12-11 42 views
11

का उपयोग कर विंडोज मेट्रो ऐप पर पृष्ठों पर नेविगेट करने में सक्षम नहीं है जब मेरा UserLogin पृष्ठ लोड होता है, तो मैं उपयोगकर्ता डेटाबेस की जांच करना चाहता हूं, और यदि यह अस्तित्व में नहीं है, या पढ़ा नहीं जा सकता है, तो मैं इसे निर्देशित करना चाहता हूं NewUser पृष्ठ।सी #

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    CheckForUser(); 
    if (UserExists == false) 
     this.Frame.Navigate(typeof(NewUser)); 
} 

समस्या यह है कि यह कभी नहीं NewUser पर जाता, तब भी जब मैं बाहर टिप्पणी if शर्त है।

+2

आप MSDN की जांच करवाने के लिए यहाँ ** एक लिंक http://msdn.microsoft.com/en-us/library/windows/apps/br211386.aspx ** – MethodMan

+0

है मुझे नहीं लगता था कि आप में नेविगेट कर सकता है 'OnNavigatedTo' विधि क्योंकि आप अभी भी नेविगेशन के बीच में हैं। – Trisped

उत्तर

14

Navigate सीधे OnNavigatedTo विधि के रूप में नहीं कहा जा सकता। आप Dispatcher के माध्यम से अपने कोड को लागू करना चाहिए और यह काम करेगा:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    CheckForUser(); 
    if (UserExists == false) 
     Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
          () => this.Frame.Navigate(typeof(NewUser))); 
} 
+0

अपने ओवरराइड विधि कॉल के शीर्ष पर बेस को कॉल करना सुनिश्चित करें। मेरे पास यह वही कोड था, आधार को घटाएं। ऑननविगेटेड (ई) और मुझे अभी भी अपवाद मिल रहा था। इस जवाब ने मुझे मदद की, धन्यवाद! –

0

आप आप इस लिंक के रूप में अच्छी तरह से कोशिश Telerik की तरह एक 3 पार्टी उपकरण का उपयोग करना चाहते हैं तो यह कोशिश करते हैं और देख सकते हैं अगर यह काम करता है

frame.Navigate(typeof(myPage)); // the name of your page replace with myPage 

पूर्ण उदाहरण

var cntnt = Window.Current.Content; 
    var frame = cntnt as Frame; 

    if (frame != null) 
    { 
     frame.Navigate(typeof(myPage)); 
    } 
    Window.Current.Activate(); 

या

Classic Windows Forms, Stunning User Interface

0

मुझे लगता है कि आप OnNavigatedTo विधि को ओवरराइड करते हैं लेकिन बेस विधि को कॉल नहीं करते हैं। यह समस्या का स्रोत हो सकता है। किसी भी तर्क से पहले आधार विधि कॉल करके देखें:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    CheckForUser(); 
    if (UserExists == false) 
     this.Frame.Navigate(typeof(NewUser)); 
} 
0

उपयोग Dispatcher.RunIdleAsync एक पृष्ठ पर अपने नेविगेशन स्थगित करने के लिए जब तक सकतें पेज पूरी तरह से भरी हुई है।

0

दूसरों सही हैं, लेकिन जब से डिस्पैचर दृश्य मॉडल से काम नहीं करता है, तो यहां वहाँ यह करने के लिए है:

SynchronizationContext.Current.Post((o) => 
{ 
    // navigate here 
}, null); 
1

यह इसलिए होता है क्योंकि आपके एप्लिकेशन वर्तमान फ्रेम पूरी तरह से लोड करने से पहले नेविगेट करने के लिए कोशिश करता है। डिस्पैचर एक अच्छा समाधान हो सकता है, लेकिन आपको वाक्यविन्यास का पालन करना होगा।

Windows.UI.Core का उपयोग कर;

private async void to_navigate() 
    { 
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => this.Frame.Navigate(typeof(MainPage))); 
    } 
  1. अपने वांछित पेज नाम के साथ mainpage बदलें।
  2. इसे to_navigate() फ़ंक्शन पर कॉल करें।