2012-10-03 19 views
8

मैं अपने WinRT मेट्रो में स्थिति निम्नलिखित है (ग # - XAML) से पृष्ठ हटाने के लिए कैसे आवेदन:।WinRT - उपेक्षा या नेविगेशन इतिहास

उपयोगकर्ता आवेदन और वह प्रवेश न होने पर लांच मेनू बार में मेरे पास बटन है जो उन्हें शॉपिंग कार्ट में नेविगेट करता है। यह उल्लेख करना महत्वपूर्ण है कि लॉग इन/आउट स्थिति के बावजूद वे उस पर क्लिक कर सकते हैं।

तो मैं इस है:

Home Page - > Login Page - > Shopping Cart 

और सब कुछ अच्छा काम करता है, लेकिन जब मैं अपने शॉपिंग कार्ट पृष्ठ पर वापस जाएं बटन दबाएं कोशिश मैं जो समझ बनाने के लिए लॉग इन पृष्ठ वापस नेविगेट कर रहा हूँ,, क्योंकि पेज मेरे नेविगेशन इतिहास में है। लेकिन मुझे यह नहीं चाहिए, मैं उपयोगकर्ता को पर वापस लौटना चाहता हूं होम पेज और लॉगिन पेज छोड़ें।

मेरा प्रश्न यह है कि यह कैसे करें, और WinRT पर फ्रेम नेविगेशन स्टैक में हेरफेर कैसे करें। मैंने दो बार वापस जाने की कोशिश की, लेकिन बिना किसी किस्मत के।

बीटीडब्ल्यू, मेरा पृष्ठ "लेआउटअवेयर पेज" पृष्ठ है और मैं इस http://dotnetbyexample.blogspot.com/2012/06/navigationservice-for-winrt.html के समान नेविगेशन सेवा का उपयोग कर रहा हूं।

उत्तर

12

आप इसे विभिन्न तरीकों से देख सकते हैं। आप इसे बना सकते हैं ताकि बैक बटन कई बार वापस जा सके जब तक यह होम पेज तक पहुंच न जाए या लॉग इन पेज के माध्यम से छोड़ देता है। आप लॉग इन पेज को कुछ भी बना सकते हैं जो नेविगेशन Frame के बाहर दिखाई देता है - या तो पॉपअप पर या एप्लिकेशन में एक अलग परत में।

* अद्यतन

8,1 में मंच Frame जो आप फेरबदल कर सकते हैं पर BackStack और ForwardStack गुण की शुरुआत की।

2

आपकी प्रोजेक्ट के सामान्य फ़ोल्डर में एक layoutAwarePage.cs फ़ाइल है। आप इस फ़ाइल से बैक बटन व्यवहार बदल सकते हैं।

protected virtual void GoBack(object sender, RoutedEventArgs e) 
     { 

      while (this.Frame.CanGoBack) this.Frame.GoBack(); 

      // Use the navigation frame to return to the previous page 
      //if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack(); 
     } 
0

आप Back बटन घटना पर GoHome() कॉल कर सकते हैं, कि आवेदन की HomePage या प्रथम पृष्ठ पर ले जाएंगे।

+0

'Frame' में कोई' GoHome' विधि है:

मामले में मैं फ़ाइल को ले जाने या इसे हटाने, यहाँ वर्तमान संस्करण है। क्या मैं कुछ भूल रहा हूँ? –

+0

@AleksandarToplek मुझे लगता है कि माइक्रोसॉफ्ट ने विन 8.1 में एपीआई बदल दी है, यह सवाल पूछे जाने पर 2 साल पहले अस्तित्व में था। – Mayank

+0

ओह, यह अजीब बात है। पूरा नेविगेशन ढांचा मेरे लिए अपूर्ण दिखता है। मैं कस्टम इतिहास ढेर को लागू करने के समाप्त हो गया। –

-3

ढेर से पॉप करने के लिए:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
{ 
    NavigationService. Navigate (new Uri ("/Main Page. xaml", UriKind.Relative)); 
} 

मुख्य सूची भले ही वे वापस जाएं बटन स्पर्श में उपयोगकर्ता रखने के लिए:

NavigationService.RemoveBackEntry(); 

वापस बटन को छू मुख्य मेनू पर नेविगेट करने के लिए:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
{ 
    // cancel the navigation 
    e.Cancel = true; 
} 
+0

Winrt – swinefeaster

+0

में नेविगेशन सेवा मौजूद नहीं है प्रश्न स्पष्ट रूप से विंडोज रनटाइम पर इसका उल्लेख करता है। –

9

मुझे पता है कि यह पुराना है, लेकिन चूंकि Google ने मुझे यह पृष्ठ पाया है, शायद किसी और को यह मिल जाएगा पेज भी

उत्तर, जबकि वैध कार्य-आसपास, प्रश्न का उत्तर नहीं देता है।

आप इसे लॉगिन पेज पर उपयोग कर सकते हैं, इसे पीछे की ढेर से हटा सकते हैं।

if(login_was_successful == true) 
{ 
    this.Frame.Navigate(typeof(ShoppingCard)); 

    if(this.Frame.CanGoBack) 
    { 
     this.Frame.BackStack.RemoveAt(0); 
    } 
} 
+1

मेरे पास गंतव्य पृष्ठ पर फ़्रेम.बैकस्टैक.रोमोव (Frame.BackStack.Last()) का उपयोग करके भाग्य है (उदाहरण के लिए इस मामले में शॉपिंग कार्ट)। – Hong

-1

जब पेज उपयोग

this.NavigationCacheMode = NavigationCacheMode.Disabled; 
+0

मेरे लिए काम नहीं करता है। यह अभी भी उस पृष्ठ पर नेविगेट करता है। –

0

मैं अपने खुद के इतिहास पर नज़र रखने के नेविगेशन सेवा लिखा लोड हो रहा है। आप इसे here पा सकते हैं।

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Media.Animation; 
using Windows.UI.Xaml.Navigation; 
using MetroLog; 
using SparkiyClient.UILogic.Services; 

namespace SparkiyClient.Services 
{ 
    public class NavigationService : INavigationService 
    { 
     private static readonly ILogger Log = LogManagerFactory.DefaultLogManager.GetLogger<NavigationService>(); 
     private readonly Dictionary<string, Type> pagesByKey = new Dictionary<string, Type>(); 
     private readonly Stack<PageStackEntry> historyStack = new Stack<PageStackEntry>(); 
     private PageStackEntry currentPage; 

     public string CurrentPageKey { get; private set; } 

     public bool CanGoBack => this.historyStack.Any(); 

     private static Frame GetFrame() 
     { 
      return (Frame)Window.Current.Content; 
     } 

     public void GoBack() 
     { 
      if (!this.CanGoBack) 
       return; 

      var item = this.historyStack.Pop(); 
      this.NavigateTo(item.SourcePageType.Name, item.Parameter, false); 
     } 

     public void GoHome() 
     { 
      if (!this.CanGoBack) 
       return; 

      var item = this.historyStack.Last(); 
      this.NavigateTo(item.SourcePageType.Name, item.Parameter, false); 
      this.historyStack.Clear(); 
     } 

     public void NavigateTo(string pageKey, bool addSelfToStack = true) 
     { 
      this.NavigateTo(pageKey, null, addSelfToStack); 
     } 

     public void NavigateTo<T>(bool addToStack = true) 
     { 
      this.NavigateTo<T>(null, addToStack); 
     } 

     public void NavigateTo<T>(object parameter, bool addSelfToStack = true) 
     { 
      this.NavigateTo(typeof(T).Name, parameter, addSelfToStack); 
     } 

     public void NavigateTo(string pageKey, object parameter, bool addToStack = true) 
     { 
      var lockTaken = false; 
      Dictionary<string, Type> dictionary = null; 
      try 
      { 
       Monitor.Enter(dictionary = this.pagesByKey, ref lockTaken); 
       if (!this.pagesByKey.ContainsKey(pageKey)) 
        throw new ArgumentException(string.Format("No such page: {0}. Did you forget to call NavigationService.Configure?", pageKey), "pageKey"); 

       if (addToStack && this.currentPage != null) 
        this.historyStack.Push(this.currentPage); 

       GetFrame().Navigate(this.pagesByKey[pageKey], parameter); 

       this.CurrentPageKey = pageKey; 
       this.currentPage = new PageStackEntry(this.pagesByKey[pageKey], parameter, null); 

       Log.Debug(this.historyStack.Reverse().Aggregate("null", (s, entry) => s + " > " + entry.SourcePageType.Name)); 
      } 
      finally 
      { 
       if (lockTaken && dictionary != null) 
        Monitor.Exit(dictionary); 
      } 
     } 

     public void Configure(string key, Type pageType) 
     { 
      var lockTaken = false; 
      Dictionary<string, Type> dictionary = null; 
      try 
      { 
       Monitor.Enter(dictionary = this.pagesByKey, ref lockTaken); 
       if (this.pagesByKey.ContainsKey(key)) 
        this.pagesByKey[key] = pageType; 
       else this.pagesByKey.Add(key, pageType); 
      } 
      finally 
      { 
       if (lockTaken && dictionary != null) 
        Monitor.Exit(dictionary); 
      } 
     } 
    } 
}