繁体   English   中英

在NavigationWindow中扩展GoBack函数

[英]Extend GoBack function in NavigationWindow

我有一些页面的NavigationWindow。 我用按钮从一个导航到另一个,然后返回导航窗口的功能。 我的问题是,某些页面在加载时会使用描述符,当您在​​Navigationwindow中使用go back函数时,我想将其处置(实际上,“描述符”是Kinect,并且在页面加载时,它会启动Kinect带有sensor.start(),我想在回退时停止它,sensor.stop()...但是我认为它与该问题的文件描述符相同,并且更多的人在使用文件描述符)。

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

提前致谢

我在评论中的建议是基于Windows Phone开发经验的。.但是,当我尝试使用Navigationwindow在wpf中应用该解决方案后,我在WP / silverlight中找不到像OnNavigatedTo / OnNavigatedFrom这样的东西。

但是我发现可以使用NaviagtionWindow的Navigating事件。 在这种情况下,您可以获取this.CurrentSource ,即Page2(如果从Page2导航回Page1)并在该Page中放置描述符。

希望这项工作。

好的,我找到了解决方法。 这也适用于以下问题:如何在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();
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM