2013-10-04 43 views
1

我將PhoneApplicationPage實例傳遞給一個類庫,並在此類庫中彈出一個usercontrol,當我按下返回按鈕時,整個應用程序退出。昨天我在應用程序中解決了這個問題,但是我不能在這個類庫中使用這個方法。 我試圖訂閱事件(BackKeyPress),但VS2012說「parent_BackKeyPress」「System.EventHandler」覆蓋和委託不能匹配。我查過了,他們匹配。覆蓋BackKeyPress在類庫中,這在WP8上是可行的嗎?

PhoneApplicationPage mContext = ...; mContext.BackKeyPress + = new EventHandler(parent_BackKeyPress); void parent_BackKeyPress(CancelEventArgs e) ppChangePIN.IsOpen = false; Application.Current.RootVisual.Visibility = Visibility.Visible; }

這裏有什麼不正確?另外,我可以在classlibrary中使用navigationservice嗎?我之前做過這個操作,導航到如下所示的類庫中創建的頁面,並最終崩潰。有人說不能在classlibrary中使用頁面,我們應該使用Popup(usercontrol)。 mContext.NavigationService.Navigate(new Uri(「/ ChangePINPage.xaml」,UriKind.Relative));

+0

根據我的知識,你不能在類庫中覆蓋backkeypress,並且你不能在類庫中使用導航服務 – MansinhDodiya

+0

我沒有得到你爲什麼要重寫backkeyperss?在這裏描述你真的想做什麼..所以我可以幫你 – MansinhDodiya

+0

好吧,很高興你能幫助我!這裏是:我的公司有這個任務來編譯一個客戶端的DLL。這個DLL將被我們的客戶端的應用程序引用,以顯示幾個頁面(你說不可能,所以我使用彈出式用戶控件代替)。但現在當我按下後退按鈕,我的客戶端的應用程序退出,這是不允許的。你有我嗎? – SevenWow

回答

1

我已經成功地做到了這一點:

// or some other method of accessing the current page 
// - but via Application, to which you have access also in class library 
var currentPage = (PhoneApplicationPage)((PhoneApplicationFrame)Application.Current.RootVisual).Content; 
currentPage.BackKeyPress += (sender, args) => 
    { 
     // Display dialog or something, and when you decide not to perform back navigation: 
     args.Cancel = true; 
    }; 

當然,你必須確保該代碼被執行,當且僅當當前頁是主頁。

我也在類庫中使用頁面。您可以使用在類庫中使用NavigationService:例如,可以從上述獲取的當前頁面(currentPage.NavigationService)獲取它。或者你可以使用PhoneApplicationFrame的導航方法:

((PhoneApplicationFrame)Application.Current.RootVisual) 
    .Navigate(
     new Uri(
      "/ClassLibraryName;component/SamplePage.xaml", 
      UriKind.Relative)); 

由於短尤里斯像「/SamplePage.xaml」將在申請項目時,導航到你有充分的位置類庫頁:「/ ClassLibraryName;組件/ SamplePage.xaml」。

不過需要注意的是,如果應用程序選擇從離開顯示消息框,停止,將無法通過認證,(從Technical certification requirements for Windows Phone):

5.2.4.2 - 後退按鈕:第一個畫面

從應用程序的第一個屏幕按下後退按鈕必須關閉應用程序。

+0

嗨,夥計,我想我已經嘗試了你上面寫的方法,它最終崩潰(調試器導航失敗),但我明天會再試一次。很多人說我們不能在dll中使用頁面,你確定你曾經成功地在dll中使用過它? – SevenWow

+0

@Enniswen是的,它其實很簡單。你只需要使用完整的位置,比如:'Navigate(new Url(「/ ClassLibraryName; component/Pages/SamplePage.xaml」,UriKind.Relative))''。 – lisp

+0

謝謝老兄,返回按鈕的事情現在工作正常,但在DLL導航仍然不能正常工作,它不能在這裏:私人無效RootFrame_NavigationFailed(對象發件人,NavigationFailedEventArgs E) { 如果(Debugger.IsAttached) { Debugger.Break( ); } } – SevenWow

相關問題