Wpf 在NavigationWindow中扩展GoBack函数
我有一个导航窗口和一些页面。我用按钮从一个导航到另一个,并返回导航窗口的功能。我的问题是,在加载某些页面时,我在其中使用了一个描述符,当您在navigationwindow中使用返回函数时,我想对其进行处理(事实上,“描述符”是Kinect,当页面加载时,它用sensor.start()启动Kinect,我想在返回时停止,sensor.stop()…但我认为它与此问题的文件描述符是一样的,更多的人使用文件描述符) 有没有办法扩展页面中的GoBack函数来处理描述符(在我的代码中,我只需要调用sensor.stop();)Wpf 在NavigationWindow中扩展GoBack函数,wpf,c#-4.0,navigationservice,navigationwindow,Wpf,C# 4.0,Navigationservice,Navigationwindow,我有一个导航窗口和一些页面。我用按钮从一个导航到另一个,并返回导航窗口的功能。我的问题是,在加载某些页面时,我在其中使用了一个描述符,当您在navigationwindow中使用返回函数时,我想对其进行处理(事实上,“描述符”是Kinect,当页面加载时,它用sensor.start()启动Kinect,我想在返回时停止,sensor.stop()…但我认为它与此问题的文件描述符是一样的,更多的人使用文件描述符) 有没有办法扩展页面中的GoBack函数来处理描述符(在我的代码中,我只需要调用se
提前感谢我在评论中的建议基于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()的方法。总之,您的答案非常有用,我将其标记为有用:)