ฉันกำลังพัฒนาแอพ windows phone 8 ฉันต้องการควบคุมปุ่มย้อนกลับของโทรศัพท์เพื่อทำงานเฉพาะอย่าง ฉันต้องการให้เมื่อผู้ใช้กดปุ่มย้อนกลับในหน้าใดหน้าหนึ่ง ระบบจะไม่นำทางไปยังหน้าก่อนหน้าแต่ไปยังหน้าที่ฉันต้องการ มีวิธีใดในการควบคุมปุ่มย้อนกลับของฮาร์ดแวร์ที่มีอยู่ในโทรศัพท์หรือไม่?
ปุ่มควบคุมย้อนกลับในแอพ Windows Phone
คำตอบ (2)
ในแอป Silverlight (WP7, WP8, WP8.1) คุณทำสิ่งนี้:
protected override void OnBackKeyPress(CancelEventArgs e)
{
// put any code you like here
MessageBox.Show("You pressed the Back button");
e.Cancel = true;
}
ซึ่งจะใช้ได้กับ Windows Phone ทุกรุ่นหากคุณใช้ Silverlight
หากคุณใช้ WinRT สำหรับ Windows Phone 8.1 จะแตกต่างออกไปเล็กน้อย:
เปิด NavigationHelper.cs และทำการแก้ไขนี้:
private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
if (this.GoBackCommand.CanExecute(null) && !e.Handled)
{
e.Handled = true;
this.GoBackCommand.Execute(null);
}
}
ตอนนี้ในหน้าแอปของคุณ (หน้าที่จะเปิดขึ้นเมื่อกดปุ่มย้อนกลับ) ให้เพิ่มเนมสเปซต่อไปนี้:
using Windows.Phone.UI.Input;
เพิ่มตัวจัดการนี้ในวิธี Constructor ของเพจของคุณ:
HardwareButtons.BackPressed += OnBackPressed;
จากนั้นเพิ่มวิธีนี้:
private async void OnBackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
e.Handled = true;
// add your own code here to run when Back is pressed
}
หมายเหตุ: ในทั้งสองกรณี บรรทัด 'e.Handled = true' จะบอก OS ว่ามีการจัดการการกดปุ่มย้อนกลับแล้ว ดังนั้น OS จะไม่ดำเนินการตามลักษณะการทำงานเริ่มต้น หากคุณลบบรรทัดนั้น โค้ดของคุณก็จะทำงาน และระบบปฏิบัติการจะทำการนำทางแบบย้อนกลับด้วย
โปรดคำนึงถึงความคิดเห็นของ Rowland เกี่ยวกับการเอาชนะปุ่มย้อนกลับ - หากคุณไม่ได้นำทางอย่างสังหรณ์ใจ คุณจะสร้างความสับสนให้กับผู้ใช้และเสี่ยงต่อการที่เกมของคุณจะถูกปฏิเสธ (หากคุณเพียงต้องควบคุมหน้าจอหรือเมนูหยุดชั่วคราว ก็ไม่เป็นไร แต่ถ้าคุณใช้ บางอย่างที่เป็นลูกเล่น เช่น การใช้ปุ่มย้อนกลับเป็นตัวควบคุมเกม คุณจะประสบปัญหา)
บล็อกของฉันมีคำตอบเดียวกันพร้อมรายละเอียดเพิ่มเติมเล็กน้อยหากคุณต้องการ: http://grogansoft.com/blog/?p=572
แม้ว่าจะสามารถยกเลิกเหตุการณ์การนำทางได้ และอนุญาตให้ในเกมแสดงหน้าจอหยุดชั่วคราวหรือคล้ายกันได้ แต่โดยทั่วไปแล้วจะไม่ได้รับอนุญาตให้ใช้ปุ่มย้อนกลับเพื่อสิ่งอื่นใดนอกเหนือจากการนำทางแบบย้อนกลับในแอป ตามข้อกำหนด 5.2.4 ของข้อกำหนดการรับรองด้านเทคนิคสำหรับ Windows Phone
เพื่อรักษาประสบการณ์ผู้ใช้ที่สอดคล้องกัน ต้องใช้ปุ่มย้อนกลับสำหรับการนำทางย้อนกลับในแอปเท่านั้น
หากคุณกำลังสร้างแอป XAML ซึ่งอนุญาตให้ยกเลิกการดำเนินการ "ย้อนกลับ" ได้ เช่น ตาม 5.2.4.4 ของข้อกำหนดการรับรองทางเทคนิคสำหรับ Windows Phone :
สำหรับเกม เมื่อกดปุ่มย้อนกลับระหว่างเล่นเกม เกมสามารถเลือกที่จะนำเสนอเมนูบริบทหรือกล่องโต้ตอบหยุดชั่วคราว หรือสามารถนำทางผู้ใช้ไปยังหน้าจอเมนูก่อนหน้าได้
จากนั้น คุณสามารถนำไปใช้ได้โดยการแทนที่เมธอด OnNavigatingFrom
บนเพจของคุณ และตั้งค่าคุณสมบัติ Cancel
ของ NavigatingCancelEventArgs
ดังนั้นตัวอย่างนี้จาก คุณลักษณะเฟรม หน้า และการนำทางสำหรับ Windows Phone 8:
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
base.OnNavigatingFrom(e);
// If the navigation can be cancelled, ask the user if they want to cancel
if (e.IsCancelable)
{
MessageBoxResult result = MessageBox.Show("Do you want to stay here?", "Confirm Navigation from Page", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
// User wants to stay here
e.Cancel = true;
return;
}
}
}
แน่นอน คุณอาจเลือกที่จะใช้พรอมต์แตกต่างออกไป แต่นั่นควรแสดงให้เห็นว่าเป็นไปได้อย่างไร