Расширить функцию 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) и разместите дескрипторы на этой странице.
Надеюсь эта работа.