c# - हैंडलिंग नेवीगेशन विंडोज 10(UWP)




navigation windows-10 (4)

मेरे Xaml पेज में मुझे एक फ़्रेम मिला है।

मैं सिर्फ फ्रेम के अंदर नेविगेट करने के लिए बैकबटन घटना होने की कोशिश कर रहा हूं।

इसलिए मैंने कोड के इस टुकड़े का उपयोग करने की कोशिश की

public MainPage(){
    this.InitializeComponent();
    if(Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) {
        Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
    }
}
private void HardwareButtons_BackPressed(object sender,BackPressedEventArgs e) {
    if(insideFrame.CanGoBack())insideFrame.GoBack();
    else  Application.Current.Exit();
}

लेकिन फोन में HardwareButtons_BackPressed इवेंट करने के बाद यह एप्लिकेशन को बंद कर देता है।

यह MainPage पर कुछ डिफ़ॉल्ट बैक बटन व्यवहार चलाने के लिए लगता है ...

मेरे द्वारा यह कैसे किया जा सकता है? और विंडोज 10 में वे वापस नेविगेशन को संभालने के लिए नई घटनाओं को जोड़ते हैं?

[अद्यतन करें]

अब मुझे पता चला कि यह SystemNavigationManager बजाय विंडोज 10 में SystemNavigationManager का उपयोग करना बेहतर है।

SystemNavigationManager currentView = SystemNavigationManager.GetForCurrentView();

Windows 10 (UWP) में Windows के लिए SystemNavigationManager शामिल है। केवल नेविगेशन उद्देश्य के लिए अन्य नामस्थान।

क्योंकि SystemNavigationManager Windows Universal Platform का हिस्सा है, इसलिए, यह मोबाइल और पीसी सहित विंडोज 10 पर चलने वाले सभी डिवाइस परिवार द्वारा समर्थित है।

सिंगल पेज के लिए

अगर आप सिर्फ सिंगल पेज के लिए नेविगेशन को हैंडल करना चाहते हैं। निम्न चरणों का पालन करें

चरण 1 । नामस्थान Windows.UI.Core उपयोग करें

using Windows.UI.Core;

चरण 2. वर्तमान दृश्य के लिए वापस अनुरोध घटना दर्ज करें। इसके लिए सबसे अच्छी जगह InitializeComponent() बाद क्लास का मुख्य कंस्ट्रक्टर है।

public MainPage()
{
    this.InitializeComponent();
    //register back request event for current view
    SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;
}

चरण 3. हैंडल BackRequested घटना

private void Food_BackRequested(object sender, BackRequestedEventArgs e)
{
    if (Frame.CanGoBack)
    {
        Frame.GoBack();
        e.Handled = true;
    }
}

एकल rootFrame लिए एक स्थान पर पूरा आवेदन

सभी दृश्यों के लिए सभी App.xaml.cs को संभालने के लिए सबसे अच्छी जगह App.xaml.cs

चरण 1 । नामस्थान Windows.UI.Core उपयोग करें

using Windows.UI.Core;

चरण 2. वर्तमान दृश्य के लिए वापस अनुरोध घटना दर्ज करें। इसके लिए सबसे अच्छी जगह है OnLaunched , OnLaunched से पहले

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    ...
    SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
    Window.Current.Activate();
}

चरण 3. हैंडल BackRequested घटना

private void OnBackRequested(object sender, BackRequestedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame.CanGoBack)
    {
        rootFrame.GoBack();
        e.Handled = true;
    }
}

सन्दर्भ- UWP में दबाया गया बटन वापस करें

आशा है कि यह किसी के लिए उपयोगी है!


आपको सिस्टम को बताने की आवश्यकता है कि आपने BackPressedEventArgs की ट्रूल्ड प्रॉपर्टी को सही से सेट करके बैकबटन प्रेस को संभाला है।

  private void OnHardwareButtonsBackPressed(object sender, BackPressedEventArgs e)
  {
        // This is the missing line!
        e.Handled = true;

        // Close the App if you are on the startpage
        if (mMainFrame.CurrentSourcePageType == typeof(Startpage))
            App.Current.Exit();

        // Navigate back
        if (mMainFrame.CanGoBack)
        {
            mMainFrame.GoBack();
        }
  }

मुझे लगता है कि यह इसलिए है क्योंकि आप app.xaml.cs. पर इसके बजाय अपने पेज में HardwareButtons_BackPressed जोड़ें।

App.xaml.cs में:

public App()
{
    this.InitializeComponent();
    this.Suspending += this.OnSuspending;

    HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}

void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;

    if (rootFrame != null && rootFrame.CanGoBack)
    {
        e.Handled = true;
        rootFrame.GoBack();
    }
}

अब, आपके फ़ोन का बैक बटन किसी भी पेज पर काम करेगा।

और फिर, यदि आप किसी पृष्ठ में वापस एक विशेष बटन जोड़ना चाहते हैं:

विशेष पृष्ठ में (या यदि आप चाहें तो प्रत्येक पृष्ठ):

public void btn_return_Tapped(object sender, TappedRoutedEventArgs e)
        {
            Frame rootFrame = Window.Current.Content as Frame;

            if (rootFrame != null && rootFrame.CanGoBack)
            {
                e.Handled = true;
                rootFrame.GoBack();
            }
        }

स्रोत: http://windowsapptutorials.com/tips/general-tips/handling-the-back-button-in-a-windows-phone-8-1-app/


इन कदमों का अनुसरण करें:

  • नीचे के रूप में अपने पृष्ठ में दो वैश्विक चर जोड़ें।

    private NavigationHelper navigationHelper;
    private RelayCommand _GoBackCommand;
  • फिर विशिष्ट पृष्ठ के निर्माता में नीचे कोड जोड़ें।

        // below code is to override the back navigation
        // hardware back button press event from navigationHelper
        _GoBackCommand = new RelayCommand
            (
                () => this.CheckGoBack(),
                () => this.CanCheckGoBack()
            );
    
        navigationHelper.GoBackCommand = _GoBackCommand;
        // ---------
  • फिर उन दोनों विधियों को जोड़ें जिन्हें हमने अभी-अभी कंस्ट्रक्टर में घोषित किया है।

    private bool CanCheckGoBack()
    {
        // this should be always true to make sure the app handles back buton manually.
        return true;
    }
    
    private void CheckGoBack()
    {
        // this will be execute when back button will be pressed
    }

ps। - इसके लिए आपको नया पेज जोड़ते समय BasicPage बजाय BasicPage का उपयोग करने की आवश्यकता हो सकती है।

आशा है कि यह मदद करेगा ..!





windows-10-mobile