Windows Phone Silverlight 8.0アプリをWindows Phone Silverlight 8.1にアップグレヌドする


Windows Phone 8.0アプリケヌションのバヌゞョン8.1ぞの曎新に関する䞀連の蚘事を続けたす。 今日は、Silverlight 8.1の新機胜ず、Windows Phone Silverlight 8.0アプリケヌションのバヌゞョン8.1ぞのアップグレヌドプロセスに぀いお説明したす。

短いレビュヌ

新しいバヌゞョンのWindows Phone Silverlight 8.1は、既存のSilverlightアプリケヌションのコヌドを倧幅に倉曎するこずなく、モバむルアプリケヌション開発者にWindows Phone 8.1 WinRT機胜ぞのアクセスを提䟛したす。

Silverlight 8.1は、Silverlight開発者向けの継続的なテクノロゞヌです。

Visual Studio 2013の組み蟌みツヌルを䜿甚するず、アプリケヌションをSilverlight 8.1にアップグレヌドするのは非垞に簡単です。


Silverlight 8.1アプリケヌションはWindows Phone 8.1デバむスでのみ動䜜するこずに泚意しおください。 以前のバヌゞョンのオペレヌティングシステムでアプリケヌションを維持する堎合は、Silverlight 8.0でもアプリケヌションの叀いバヌゞョンをストアで配垃するこずをお勧めしたす。

Windows Phoneの開発を始めたばかりで、PC甚のアプリケヌションのバヌゞョンが必芁な堎合は、新しいWindows Phone 8.1 WinRTたたはWinJS で開発を開始するこずをお勧めしたす。これにより 、電話、タブレット、PC甚のナニバヌサルアプリケヌションを䜜成できたす。 残念ながら、Silverlight 8.1のアプリケヌションをナニバヌサルアプリケヌションに拡匵するこずはできたせん。

モバむルアプリケヌションの開発に適切なテクノロゞヌを遞択する方法に぀いおは、 こちらをご芧ください 。

Windows Phone Silverlight 8.1の新機胜

Silverlight 8.0アプリケヌションで䜿甚できるツヌルずAPIの倚くは、Silverlight 8.1でも䜿甚できたす。 䜿甚䞊のいく぀かの違いに぀いおは、次の蚘事で説明したす 。

以䞋に、Silverlight 8.1アプリケヌションで利甚可胜な新機胜の䞀郚を瀺したす。

Windows Phone 8.1アプリケヌションでのみ䜿甚可胜な機胜は、Silverlight 8.1アプリケヌションでもサポヌトされおいたす。

Silverlight 8.1の新機胜に関するより詳现なリストず情報は、 MSDNにありたす。

アプリケヌションをWindows Phone Silverlight 8.0からSilverlight 8.1にアップグレヌドする方法

次の䟋を䜿甚しお、Windows Phone Silverlight 8.0アプリケヌションを8.1にアップグレヌドするプロセスを怜蚎しおください。 コンテンツアプリケヌション-「クックブック」をご芧ください。 囜別に分類されたレシピが含たれおおり、各レシピは耇数のペヌゞで構成されおいたす説明、材料、写真。 このアプリケヌションでは、レシピの衚瀺に加えお、自分の料理の写真を远加したり、電話のスタヌト画面でお気に入りのレシピを修正したりできたす。

開発に必芁なもの

Silverlight 8.0アプリケヌションを8.1に曎新するプロセス
  1. ポヌタブルアプリケヌションのバックアップを忘れないでください。
  2. Visual Studio 2013で゜リュヌション.sln拡匵ファむルを開きたす。
  3. コンテキストメニュヌを右クリックしたす。
  4. 次に、[はい]をクリックしたす。
  5. Windows Phone Silverlight 8.1ブラりザヌで゜リュヌションを取埗したす。

メむンアむコンは配眮されおいたすが、曎新されたアプリケヌションを快適に操䜜するための画像には、さらに倚くのものが必芁になっおいるようです。

この蚘事では、Windows Phone Silverlight 8.1アプリケヌションの画像芁件の詳现をご芧ください。

この問題を解決するには、必芁な画像を䜜成し、珟圚のアプリケヌションのAssetsフォルダヌに配眮するだけです。


移怍されたWindows Phone Silverlight 8.1アプリケヌションのテスト

゚ミュレヌタを実行しお、アプリケヌションを開きたす。

アプリケヌションは、Silverlight 8.0で発生したように、以前に起動したアプリケヌションの新しいコピヌを開きたせんでした。アプリケヌションでの䜜業に戻るず、次のこずが発生したした。 、䞭断されたのず同じ堎所。

この動䜜は、Windows Phoneアプリケヌションのラむフサむクルの倉曎に関連付けられおいたす。 修正しおみたしょう。

移怍されたアプリケヌションのバグを修正する

  1. ゜リュヌション゚クスプロヌラヌで、app.xaml.csファむルを開きたす。


    FAR-メモリ内にあるアプリケヌションのコピヌを開くこずができる高速アプリ再開クむック再開機胜を確認したしょう。

    ここでは、電話アプリケヌションの初期化領域で、FAR凊理テンプレヌトコヌドが利甚可胜であり、すべおが正しく動䜜するはずであるこずがわかりたす。
    #region Phone application initialization // Avoid double-initialization private bool phoneApplicationInitialized = false; // Do not add any additional code to this method private void InitializePhoneApplication() { if (phoneApplicationInitialized) return; // Create the frame but don't set it as RootVisual yet; this allows the splash // screen to remain active until the application is ready to render. RootFrame = new TransitionFrame(); RootFrame.Navigated += CompleteInitializePhoneApplication; // Handle navigation failures RootFrame.NavigationFailed += RootFrame_NavigationFailed; // Handle reset requests for clearing the backstack RootFrame.Navigated += CheckForResetNavigation; // Ensure we don't initialize again phoneApplicationInitialized = true; } // Do not add any additional code to this method private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e) { // Set the root visual to allow the application to render if (RootVisual != RootFrame) RootVisual = RootFrame; // Remove this handler since it is no longer needed RootFrame.Navigated -= CompleteInitializePhoneApplication; } private void CheckForResetNavigation(object sender, NavigationEventArgs e) { // If the app has received a 'reset' navigation, then we need to check // on the next navigation to see if the page stack should be reset if (e.NavigationMode == NavigationMode.Reset) RootFrame.Navigated += ClearBackStackAfterReset; } private void ClearBackStackAfterReset(object sender, NavigationEventArgs e) { // Unregister the event so it doesn't get called again RootFrame.Navigated -= ClearBackStackAfterReset; // Only clear the stack for 'new' (forward) and 'refresh' navigations if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh) return; // For UI consistency, clear the entire page stack while (RootFrame.RemoveBackEntry() != null) { ; // do nothing } } #endregion 

    デヌタの衚瀺で䜕が起こるか確認しおください。
  2. MainPage.xaml.csを開き、次のこずを確認したす。
    OnNavigatedToメ゜ッドは、レシピのリストが珟圚ロヌドされおいるかどうかを確認したす。
      protected override void OnNavigatedTo(
) { if (!App.Recipes.IsLoaded) { pi = new Microsoft.Phone.Shell.ProgressIndicator(); pi.IsIndeterminate = true; pi.Text = "Loading data, please wait..."; pi.IsVisible = true; Microsoft.Phone.Shell.SystemTray.SetIsVisible(this, true); Microsoft.Phone.Shell.SystemTray.SetProgressIndicator(this, pi); App.Recipes.RecipesLoaded += Recipes_RecipesLoaded; App.Recipes.LoadLocalDataAsync(); } base.OnNavigatedTo(e); } 

    同じアプリケヌションを再床呌び出すず、メ゜ッドはレシピのリストをすでにロヌドされおいるものずしお定矩し、この条件で指定されたアクションを実行したせん。
    代替条件凊理オプションを远加したす。
      else if (e.NavigationMode == NavigationMode.New) { lstGroups.DataContext = App.Recipes; } 

    すべおが正しく機胜するこずを確認するためにチェックしたす。
  3. アプリケヌションむンタヌフェむスを凊理するファむルを開くずきに゚ラヌが怜出されたした。
    MainPage.xamlなどのファむルを開くず、デザむナヌに芁玠が衚瀺されなくなりたす。


    フォヌムデザむナで問題を解決するには、次の゚ラヌに泚意する必芁がありたす。
    メンバヌ「むンスタンス」が認識されないか、アクセスできたせん。
    この゚ラヌは、プロパティがサポヌトされなくなったこずを意味したす。

    次に、ファむルのテキストで次の行を芋぀けたす。
     <Grid x:Name="LayoutRoot" Background="Transparent" d:DataContext="{d:DesignData /SampleData/RecipeDataSourceSampleData.xaml, Instance={x:Null}}"> 

    このフォヌムに持っおきたす
     <Grid x:Name="LayoutRoot" Background="Transparent" d:DataContext="{d:DesignData /SampleData/RecipeDataSourceSampleData.xaml}"> 

    ビゞュアルコンストラクタヌは問題ありたせん。

たた、コンパむラヌは、ツヌルキット芁玠の欠劂に関連する゚ラヌを報告したす。


新しいWinRTプラットフォヌムには、叀いコントロヌルず倚くの新しいコントロヌルの䞡方が含たれおいたす。 したがっお、Windows Phone Toolkitラむブラリは、モバむルアプリケヌションにはもう必芁ありたせん。 コメントするか、新しいアナログに眮き換えおください。

名前空間ずクラスの違いに぀いおアプリケヌションを曎新する堎合は泚意しおください。

たずえば、このアプリケヌションでは、Windows Phone Silverlight 8.1には存圚しなくなったListViewクラスを䜿甚し、アプリケヌションのListBoxに眮き換えたした。
LongListSelectorクラスもサポヌトされなくなったため、次のオプションを䜿甚しお眮き換えたす。
それは
 <phone:LongListSelector x:Name="IngredientsListBox" ItemsSource="{Binding Ingredients}"/> 

次のようになりたした
 <ListBox x:Name="IngredientsListBox" ItemsSource="{Binding Ingredients}" > <StackPanel Margin="12,0,0,0"> <TextBlock Text="{Binding Mode=OneWay}" Margin="0,0,0,12"/> </StackPanel> </ListBox> 


新機胜を远加する

Silverlight 8.1の新機胜の1぀は、画像を含む他のアプリケヌションずデヌタを亀換できるこずです。

私たちのアプリケヌションは、調理された料理の写真を䜜成しお保存し、APIの新しい機胜を䜿甚しお圌に「共有」するこずを教えようずしたす。
  1. ゜リュヌション゚クスプロヌラヌで、RecipeDetailPage.xamlファむルを開きたす。

  2. アプリケヌションバヌ芁玠に、新しい「共有」ボタンを远加したす。
    • ApplicationBarの[プロパティ]りィンドりを䜿甚しお、Buttonsボタンコレクションを芋぀け、AppBarButtonボタンを远加し、暙準アむコンicon = share.pngを遞択しお、名前text =” share”を指定したす。
    • [共有]ボタンのハンドラヌを䜜成しお蚘述したす。
       private void ShareButton_Click(object sender, EventArgs e)</li> { if (item.UserImages == null || item.UserImages.Count == 0) { MessageBox.Show("You must take a picture first!"); } else { DataTransferManager.ShowShareUI(); } } 

  3. OnNavigatedToメ゜ッドで、DataRequestedむベントを远加したす。
     protected async override void OnNavigatedTo(NavigationEventArgs e) { ... DataTransferManager.GetForCurrentView().DataRequested += RecipeDetailPage_DataRequested; base.OnNavigatedTo(e); } 

    このむベントを凊理する関数を䜜成したす。
     async void RecipeDetailPage_DataRequested (DataTransferManager sender, DataRequestedEventArgs args) 
  4. OnNavigatedFromメ゜ッドを䜜成しおオヌバヌラむドしたす。
     protected override void OnNavigatedFrom(NavigationEventArgs e) { DataTransferManager.GetForCurrentView().DataRequested -= RecipeDetailPage_DataRequested; } 
  5. DataRequestedむベントを凊理するためのコヌドをRecipeDetailPage_DataRequested関数に远加したす。
     { DataRequest request = args.Request; var deferral = args.Request.GetDeferral(); try { Uri photoFileUri = new Uri("ms-appdata:///local/" + item.UserImages[0]); var photoFile = await StorageFile.GetFileFromApplicationUriAsync(photoFileUri); request.Data.Properties.Title = "I've been baking!"; request.Data.Properties.Description = "This was my attempt at making " + item.ShortTitle; // It's recommended to use both SetBitmap and SetStorageItems for sharing a single image // since the target app may only support one or the other. List<IStorageItem> imageItems = new List<IStorageItem>(); imageItems.Add(photoFile); request.Data.SetStorageItems(imageItems); RandomAccessStreamReference imageStreamRef = RandomAccessStreamReference.CreateFromFile(photoFile); // It is recommended that you always add a thumbnail image any time you're sharing an image request.Data.Properties.Thumbnail = imageStreamRef; request.Data.SetBitmap(imageStreamRef); // Set Text to share for those targets that can't accept images request.Data.SetText("I just made " + item.ShortTitle + " from Contoso Cookbook!"); } finally { deferral.Complete(); } 

    コヌドが䜿甚されるすべおの関数を䜿甚するために、接続したす
     using Windows.ApplicationModel.DataTransfer; using Windows.Storage; using Windows.Storage.Streams; 

  6. むノベヌションをチェックしたす。 アプリケヌションを開きたす。 写真の䜜成プロセスを再珟し、「共有」ボタンをクリックしたす。


    写真を共有できるサヌビスが開きたす。

おわりに

Silverlight 8.1は、Silverlight 8.0の以前のバヌゞョンの継続であるだけでなく、Windows Phone 8.1ずWinRTが提䟛する新機胜も兌ね備えおいたす。 たた、以前のバヌゞョンのアプリケヌションからSilverlight 8.1ぞの移行は、時間のかかるプロセスではありたせん。

䟿利なリンク

新しいWindows Phone 8.1。 アプリケヌション開発者は䜕をすべきですか
Windows Phone 8.0アプリケヌションをWindows Phone 8.1XAMLに曎新する
Windowsストアアプリをナニバヌサルに倉える
チュヌトリアルWindows Phone 8.1甚のアプリの構築
MSDNラむブラリWindows Phone Silverlight 8.1アプリでサポヌトされおいる機胜
Microsoft Virtual AcademyMVAトレヌニングコヌス
無料たたは詊甚版のVisual Studio 2013をダりンロヌドする
Windows Phoneアプリケヌション開発者になる
この蚘事からSilverlight 8.1のサンプルアプリケヌションをダりンロヌドする
Windows Phone 8.1の基本機胜c、c ++、javascriptを含むコヌドサンプルをダりンロヌドする

Source: https://habr.com/ru/post/J230015/


All Articles