0

基本上,我所擁有的是一個解決方案,其中兩個項目針對Windows Phone 7和Windows Phone 8.我已將WP7項目的頁面和類鏈接到WP8項目(作爲鏈接添加),每個項目還包含兩個單獨的頁面TestPage.xamlTestPageWP8.xaml在一個解決方案中維護WP7和WP8版本

在WP8項目中,我增加了額外的Conditional compilation symbolsWP8。所以在我的我的MainPage有類似:

 private void onButtonClick(object sender, RoutedEventArgs e) 
     { 
#if WP8 
      NavigationService.Navigate(new Uri("/TestPageWP8.xaml", UriKind.Relative)); 
#else 
      NavigationService.Navigate(new Uri("/TestPage.xaml", UriKind.Relative)); 
#endif 
     } 

的問題是,我無法打開TestPageWP8,應用程序始終打開TestPage

我的啓動項目是WP7,我有諾基亞Lumia 920和610我我錯過了什麼,但是什麼?

謝謝!

+1

在一個側面說明,使用條件編譯是不是最好的做法。嘗試使用適當的MVVM方法,這將避免很多令人頭痛的問題。 – danielrozo

+0

我會記住這一點 –

+1

有一個關於諾基亞開發者wiki的偉大教程(http://developer.nokia.com/Community/Wiki/Co-development_for_Windows_Phone_7/8_and_Windows_8_guide),其中涵蓋了WP7,WP8和Win8代碼共享同樣的解決方案。 –

回答

1

那麼,如果它導航到TestPage,這意味着無論是條件編譯符號沒有正確定義,或者你正在運行應用程序的WP7版本......自從你的啓動後,似乎是這種情況項目是WP7版本。

+0

感謝您的回覆,那麼我該如何選擇啓動項目 –

+0

在解決方案資源管理器中,右鍵單擊一個項目並選擇「設置爲啓動項目」。只需確保在部署到WP7和WP8時更改項目。 – danielrozo

+0

這是我的stickpoint如何更改項目 –

1

試試這個代碼:

if (Environment.OSVersion.Version >= new Version(8, 0)) 
{ 
    NavigationService.Navigate(new Uri("/TestPageWP8.xaml", UriKind.Relative)); 
} 
else 
{ 
    NavigationService.Navigate(new Uri("/TestPage.xaml", UriKind.Relative)); 
} 
+0

謝謝你的答案,這是我的第一個想法,但我有一個異常「System.Reflection.TargetInvocationException」 –

+0

什麼是你的目標whindows手機操作系統版本?您可以在項目屬性中看到這些信息。 – idenardi

+0

WP7,我想要做的就是使用'SpeechSynthesizer',如果手機是WP8 –

1

如果你有一個啓動項目的WP7版本,那麼「WP8」編譯符號是不是在這個解決方案定義,你會瀏覽到TestPage.xaml。
如果您想導航到TestPageWP8.xaml,您需要將WP8項目設置爲啓動項目。
還要確保編譯符號WP8實際上是在您的WP8項目中定義爲 - 右鍵單擊​​該項目,轉到屬性並檢查生成選項卡,如果WP8定義在「SILVERLIGHT; WINDOWS_PHONE」符號旁邊。

+0

我的問題來自共享App.xaml –

1

運用MangoPollo library這個例子的代碼,你可以讓你自己SpeechSynthesizer

Type taskDataType = Type.GetType("Microsoft.Phone.Tasks.MapsTask, Microsoft.Phone"); 
object task = taskDataType.GetConstructor(new Type[] {}).Invoke(null); 
Utils.SetProperty(task, "SearchTerm", SearchTerm); 
if (ZoomLevel > 0) 
    Utils.SetProperty(task, "ZoomLevel", ZoomLevel); 
Utils.SetProperty(task, "Center", Center); 
MethodInfo showmethod = taskDataType.GetMethod("Show"); 
showmethod.Invoke(task, new object[] {}); 
+0

謝謝你兄弟,我很抱歉,但我不明白這是如何相關的,真的:D –

+0

@SeeSharp只需在語音中找到需要使用的庫,並將其包裝爲像MangoPollo庫一樣封裝僅在WP8中可用的MapsTask庫。 – csharpwinphonexaml

+0

感謝您的努力 –

相關問題