在NavigationWindow中扩展GoBack功能

时间:2013-12-11 00:24:43

标签: wpf c#-4.0 navigationservice navigationwindow

我有一些带有一些页面的NavigationWindow。我用按钮从一个导航到另一个,然后返回导航窗口的功能。我的问题是我在加载时在某些页面中使用了描述符,并且当你在navigationwindow中使用go back函数时我想要处理它(实际上“描述符”是Kinect,当页面加载时,它开始Kinect with sensor.start(),我想在返回时停止它,sensor.stop()...但我认为它与此问题的文件描述符相同,而且更多的人使用了文件描述符)。

有没有办法在页面中扩展GoBack功能来处理描述符(在我的代码中我只需要调用sensor.stop();)?

提前致谢

2 个答案:

答案 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();
            }
        }
    }
}