ปุ่มควบคุมย้อนกลับในแอพ Windows Phone

ฉันกำลังพัฒนาแอพ windows phone 8 ฉันต้องการควบคุมปุ่มย้อนกลับของโทรศัพท์เพื่อทำงานเฉพาะอย่าง ฉันต้องการให้เมื่อผู้ใช้กดปุ่มย้อนกลับในหน้าใดหน้าหนึ่ง ระบบจะไม่นำทางไปยังหน้าก่อนหน้าแต่ไปยังหน้าที่ฉันต้องการ มีวิธีใดในการควบคุมปุ่มย้อนกลับของฮาร์ดแวร์ที่มีอยู่ในโทรศัพท์หรือไม่?


person user3599830    schedule 31.12.2014    source แหล่งที่มา


คำตอบ (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

person pumpkinszwan    schedule 31.12.2014

แม้ว่าจะสามารถยกเลิกเหตุการณ์การนำทางได้ และอนุญาตให้ในเกมแสดงหน้าจอหยุดชั่วคราวหรือคล้ายกันได้ แต่โดยทั่วไปแล้วจะไม่ได้รับอนุญาตให้ใช้ปุ่มย้อนกลับเพื่อสิ่งอื่นใดนอกเหนือจากการนำทางแบบย้อนกลับในแอป ตามข้อกำหนด 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;
        }
    }
}

แน่นอน คุณอาจเลือกที่จะใช้พรอมต์แตกต่างออกไป แต่นั่นควรแสดงให้เห็นว่าเป็นไปได้อย่างไร

person Rowland Shaw    schedule 31.12.2014
comment
ฉันกำลังพัฒนาเกมและจำเป็นต้องไปที่หน้าใดหน้าหนึ่งโดยกดปุ่มย้อนกลับ พวกเขามีวิธีที่จะทำเช่นนั้นหรือไม่? - person user3599830; 31.12.2014
comment
นี่เป็นเกม XAML หรือ XNA - person Rowland Shaw; 31.12.2014
comment
@ user3599830 ในกรณีนี้ฉันได้อัปเดตพร้อมตัวอย่างให้คุณแล้ว - person Rowland Shaw; 31.12.2014