Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在NavigationWindow中扩展GoBack函数_Wpf_C# 4.0_Navigationservice_Navigationwindow - Fatal编程技术网

Wpf 在NavigationWindow中扩展GoBack函数

Wpf 在NavigationWindow中扩展GoBack函数,wpf,c#-4.0,navigationservice,navigationwindow,Wpf,C# 4.0,Navigationservice,Navigationwindow,我有一个导航窗口和一些页面。我用按钮从一个导航到另一个,并返回导航窗口的功能。我的问题是,在加载某些页面时,我在其中使用了一个描述符,当您在navigationwindow中使用返回函数时,我想对其进行处理(事实上,“描述符”是Kinect,当页面加载时,它用sensor.start()启动Kinect,我想在返回时停止,sensor.stop()…但我认为它与此问题的文件描述符是一样的,更多的人使用文件描述符) 有没有办法扩展页面中的GoBack函数来处理描述符(在我的代码中,我只需要调用se

我有一个导航窗口和一些页面。我用按钮从一个导航到另一个,并返回导航窗口的功能。我的问题是,在加载某些页面时,我在其中使用了一个描述符,当您在navigationwindow中使用返回函数时,我想对其进行处理(事实上,“描述符”是Kinect,当页面加载时,它用sensor.start()启动Kinect,我想在返回时停止,sensor.stop()…但我认为它与此问题的文件描述符是一样的,更多的人使用文件描述符)

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


提前感谢

我在评论中的建议基于windows phone开发经验。。但在我尝试使用navigationwindow在wpf中应用该解决方案之后,我在WP/silverlight中发现了类似于OnNavigatedTo/OnNavigatedFrom的东西

但我发现可以使用NaviagtionWindow的导航事件。在这种情况下,您可以获得
this.CurrentSource
,即第2页(如果您从第2页导航回第1页),并在该页中处理描述符


希望这能奏效。

好的,我找到了解决方法。它还适用于以下问题:如何在WPF中处理对象。奇怪的是,所有关于WPF中dispose对象的帖子都在谈论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();
            }
        }
    }
}

若我正确理解了您的要求,我的方法将是:在OnNavigatedTo页面事件中处理描述符。谢谢。我将在Page.OnNavigatedFrom中尝试OnNavigated,因为我在页面中有变为非活动的描述符引用。我尝试了,但WPF未实现Page.OnNavigatedFrom:(是的,你是对的,因此我在回答中建议了另一种方法。但无论如何,很高兴知道你找到了自己的方法。这对其他有类似问题的人来说很有用。你的方法与我的方法非常相似:使用导航事件。但在我的方法中,你在自己的对象/页面中使用事件,因此你可以直接访问所有ob对象属性。如果从另一个对象调用它,则必须允许访问要处理的属性:必须将它们公开(公开的Kinect sensor;而不是私有的Kinect sensor;)或实现类似public void CloseKinect()的方法。总之,您的答案非常有用,我将其标记为有用:)