Расширить функцию GoBack в NavigationWindow

У меня есть NavigationWindow с некоторыми страницами. Я перемещаюсь от одного к другому с помощью кнопок и возвращаюсь назад к функции окна навигации. Моя проблема в том, что я использую дескриптор на некоторых страницах, когда они загружаются, и я хотел бы использовать его, когда вы используете функцию возврата назад в навигационном окне (на самом деле "дескриптором" является Kinect, а когда страница загружается, он запускается Kinect с sensor.start(), и я хочу остановить его при возврате, sensor.stop()... но я думаю, что это то же самое, что дескриптор файла для этой проблемы, и гораздо больше людей работали с дескрипторами файлов).

Есть ли способ расширить функцию GoBack на странице, чтобы располагать дескрипторы (в моем коде мне нужно только вызвать sensor.stop();)?

заранее спасибо

2 ответа

Решение

Хорошо, я нашел, как сделать обходной путь. Это относится и к вопросу: как расположить объект в WPF. Странные сообщения о утилизации объектов в WPF рассказывают о GC, и вы не можете утилизировать их самостоятельно. Да, GC располагает объекты автоматически, но когда хочет. Но, может быть, вы хотите утилизировать сразу, или у вас есть объект, который нуждается в предыдущих операциях, прежде чем утилизировать. В моем случае, Kinect необходимо остановить перед утилизацией (вы можете утилизировать без остановки, но инфракрасный датчик Kinect все еще работает). И GC не является решением, потому что мне нужно остановить его, прежде чем утилизировать.

Итак, решение:

public partial class MyClass : Page
{
    private KinectSensor sensor;

    public MyClass()
    {
        InitializeComponent();
        this.Loaded += (s, e) =>  { NavigationService.Navigating += NavigationService_Navigating; };

        // What you want to add to the constructor
        // I want to start Kinect
        sensor = KinectSensor.KinectSensors.FirstOrDefault(k => k.Status == KinectStatus.Connected);
        sensor.Start();

    }

    public void NavigationService_Navigating(object sender, NavigatingCancelEventArgs e)
    {
        if (e.NavigationMode == NavigationMode.Back)
        {
            // What you want to do.
            // I want to stop and dispose Kinect
            if (sensor != null)
            {
                sensor.Stop();
                sensor.Dispose();
            }
        }
    }
}

Мое предложение в комментарии было основано на опыте разработки Windows Phone... но после того, как я попытался применить это решение в wpf с помощью навигационного окна, я не нашел ничего подобного OnNavigatedTo/OnNavigatedFrom в WP/silverlight.

Но я обнаружил, что навигационное событие NaviagtionWindow можно использовать вместо этого. В этом случае вы можете получить this.CurrentSource это страница2 (если вы вернетесь назад от страницы2 к странице1) и разместите дескрипторы на этой странице.

Надеюсь эта работа.

Другие вопросы по тегам