我有一些带有一些页面的NavigationWindow。我用按钮从一个导航到另一个,然后返回导航窗口的功能。我的问题是我在加载时在某些页面中使用了描述符,并且当你在navigationwindow中使用go back函数时我想要处理它(实际上“描述符”是Kinect,当页面加载时,它开始Kinect with sensor.start(),我想在返回时停止它,sensor.stop()...但我认为它与此问题的文件描述符相同,而且更多的人使用了文件描述符)。
有没有办法在页面中扩展GoBack功能来处理描述符(在我的代码中我只需要调用sensor.stop();)?
提前致谢
答案 0 :(得分:1)
我在评论中的建议是基于Windows手机开发经验..但在我尝试使用navigationwindow在wpf中应用该解决方案之后,我发现在WP / silverlight中没有像OnNavigatedTo / OnNavigatedFrom。
但我发现可以使用NaviagtionWindow的导航事件。在那种情况下,您可以获得this.CurrentSource
这是Page2(如果您从Page2导航回Page1)并在该页面中处理描述符。
希望这项工作。
答案 1 :(得分:0)
好的,我找到了解决方法。它也适用于以下问题:如何在WPF中处置对象。关于在WPF中处理对象的所有帖子都谈论GC并且你不能自己处理它,这很奇怪。是的,GC会自动处理对象,但是在他想要的时候。但也许您想要立即处置,或者您有一个在处置之前需要先前操作的对象。在我的情况下,Kinect需要在处理之前停止(您可以不停地处理,但kinect ir传感器仍在工作)。 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();
}
}
}
}