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();
}
}
इन कदमों का अनुसरण करें:
-
नीचे के रूप में अपने पृष्ठ में दो वैश्विक चर जोड़ें।
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
का उपयोग करने की आवश्यकता हो सकती है।
आशा है कि यह मदद करेगा ..!