簡體   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