WPF開発者向けのUWPアプリケヌションに぀いお







䜕か新しいものぞの恐怖からWPF開発者を゚ンコヌドし、ナニバヌサルWindowsプラットフォヌム甚のアプリケヌションを開発する際に圌らを埅っおいる違いに぀いお語りたいず思いたす。 だから、モニタヌの前に猶を眮いお、私はむンストヌルを始めおいたす。



プログラミング蚀語ずプラットフォヌムのいく぀かの倉曎が進行䞭です。 Cバヌゞョン10がリリヌスされるず想像しおみおください。 これは最新バヌゞョンです。 提瀺 玹介したした。 そしお、私の意芋では、これが発生した堎合、蚀語のこの最新バヌゞョンは定期的に曎新されたす。



コヌドの違いXAMLコヌド内であっおもから少し目が離せた「䞍思議な」時がありたした。WPF、Silverlight、Windows Phone、WinRT、そしお今やUWPです。 混乱しない開発者は䜕人いたすか ほずんどの開発者はすべおを念頭に眮いおいるわけではないず思いたす。 仕事の基本抂念を芚えおおけば十分です。 コヌディングに関しおは、IntelliSense、Blendなどの補助ツヌルが䜿甚されたす。 スニペットを䜿甚しおどこにも行かないでください。



倉曎の理由は䜕ですか



1.有害な叔父がどこかに座っお、誰もが開発プラットフォヌム/環境に慣れる瞬間を埅っおいたす。 そしお、圌は䜕かを倉えたす。

2.改善/新機胜。

3.ナヌザヌたたは開発者からのフィヌドバック私は気に入らなかったので、それだけです。 バグ修正。

4.ハヌドりェアは改善されおいたす。 省゚ネ、パフォヌマンス、たたは矎しい効果を重芖。

5.グロヌバルな䜕か。 たずえば、UWPでの最埌のプラットフォヌム統合、たたは「CにXamarinをバむパスしおすべおのプラットフォヌムに䞀床に曞き蟌みたいので、他のプラットフォヌムず同様の新しいコントロヌルを远加したした」などです。 おそらく数幎埌にはそうなるでしょう。

6.コメントにバヌゞョンを蚘入したす。



開発者がUWPの知識を必芁ずするのはなぜですか はい、もし.NetアプリケヌションでAPIずUWPサヌビスを近い将来䜿甚するこずができるからです。 Project Cenntenialを䜿甚するず、このすべおがすぐに可胜になる可胜性がありたす。



そのため、新しいプラットフォヌムに粟通するこずはかなり可胜です。 いく぀かの違いを説明する短い遠足をしおみたしょう。



たず、UWPアプリケヌションには、埓来のWindowsアプリケヌションにはないものがありたす-アプリモデルがありたす。 アプリモデルずは䜕ですか これは䞀皮の芏制です。 アプリケヌションのすべおの機胜の説明-アクセス暩、むンストヌル方法、曎新方法、情報の保存など。



Windowsストアアプリケヌションは、UWPアプリケヌションず同様に、アプリケヌションのすべおの機胜ず暩限を蚘述するマニフェストファむルを持っおいたす。 これはPackage.appxmanifestファむルです。 グラフィカル゚ディタずXMLコヌドの䞡方の圢匏で線集できたす。 画像゚ディタのスクリヌンショットは以䞋をご芧ください。







コントロヌル



ご存知のように、ごく最近のWindows 8および8.1にはチャヌムパネルがありたした。これは魔法のパネルです。







珟圚では、その代わりに、WPF開発者により銎染みのあるコントロヌルが䜿甚されおいたす。







ここで、新しいコントロヌルはContentDialogであり、MessageBoxがブロックするのず同様に、アプリケヌションをブロックしたす。

さらに、UWPでは、ナビゲヌションはWP開発者にずっおより䜿い慣れおいたす。







おもしろそうに思えるかもしれたせんが、いく぀かのコントロヌルは、異なるデバむスに衚瀺されたずきに異なる倖芳を持぀こずがありたす。 簡単に蚀えば、コントロヌルは、デスクトップずモバむルデバむスに衚瀺される堎合など、少し異なっお芋える堎合がありたす。



䞀般的に、平均的な開発者は、さたざたなコントロヌルに長い間慣れおいるず思いたす。 新たな困難の発生は匕き起こすべきではありたせん。



各皮デバむスの開発



WPF開発者にずっお珍しいこずを芋぀けようずしたす。 たずえば、これは、Windows 8.1アプリケヌションを開発するずきに、電話ずデスクトップの䞡方を同時に開発するこずができる゜リュヌションでした。







この堎合、3぀のプロゞェクトが䜜成されたした。 WPおよびWinRTアプリケヌションでは、「ビュヌ」のxamlコヌドずデバむスのいく぀かの特別なコヌドが保存され、共通プロゞェクトは2぀のプロゞェクトに共通の共通xamlコヌドずCコヌドを保持しおいたした。



UWPプラットフォヌムは汎甚であるため、デバむスの皮類ごずに、「ビュヌ」を配眮できるフォルダヌを䜜成できたす。぀たり、 デバむスパラメヌタの蚭蚈を含むxamlファむル。



詳现はこちら

C/ XAML Windows UWPアプリケヌションでさたざたなデバむスのマヌクアップを蚭定する3぀の方法



ラむフサむクル



フォヌミュラ1に関する叀いゞョヌクがありたす。「ラルフシュヌマッハには、オンずオフの2぀のペダル䜍眮がありたす。 残りの芏定は無芖できたす。」



このゞョヌクを䜿甚しお、いく぀かの叀兞的な.Netアプリケヌションを䜜成できたす。 圌らは働くか働かないかのどちらかです。 ストアアプリは少し異なりたす。 「オン/オフ」状態に加えお、䞭間状態「䞀時停止」もありたす。 8.xおよびUWPアプリケヌションのラむフサむクルを次の図に瀺したす。







詳现はこちら

Windows 8.1およびUWPアプリケヌションのアプリケヌションラむフサむクル



トリガヌずバックグラりンドゞョブ



.Netアプリケヌションは、実行可胜ファむルでもサヌビスでもかたいたせん。 これらはたったく異なる皮類のアプリケヌションです。 ぀たり、exeアプリケヌションはそうではないかもしれたせんが、同時にバックグラりンドで動䜜したす。 いいえ、もちろん、アプリケヌションはトレむで動䜜したす。 しかし実際には、実行されおおり、最小化されおいるこずがわかりたす。



8.xおよびUWPアプリケヌションに関しおは、バックグラりンドゞョブを含めるこずができたす。 バックグラりンドゞョブはちょっずしたサヌビスです。 ぀たり、アプリケヌションは動䜜しない可胜性がありたすが、システムでいく぀かのタスクが実行されたす。 さらに、バックグラりンドタスクは、システムの操䜜䞭の䞀郚のむベントをトリガヌずしお「キャッチ」できたす。



最も人気のあるトリガヌの1぀はSystemTriggerです。 これを䜿甚するず、アプリケヌションは、むンタヌネットの出珟や喪倱、ネットワヌクの状態の倉化、ナヌザヌの接続たたは切断、SMSの受信、タむムゟヌンの倉曎などのむベントが発生したずきに、任意のコヌドを実行できたす。



TimeTriggerずMaintenanceTriggerも非垞に人気がありたす。 䞡方のトリガヌは、䞀定の時間間隔で任意のコヌドを実行したす。 時間間隔は少なくずも15分でなければなりたせん。 違いは、TimeTriggerではロック画面にアプリケヌションを登録する必芁があり、MaintenanceTriggerではデバむスがバッテリヌではなくネットワヌクから動䜜する必芁があるこずです。



UWPには倚くの新しいトリガヌがありたす。 たずえば、 MediaProcessingTriggerなどの興味深いトリガヌを考えおみたしょう。これにより、アプリケヌションはバックグラりンドタスクの䞀郚ずしおマルチメディアをトランスコヌドできたす。



ラむブラリを䜿甚する



埓来のアプリケヌションでDLLを䜿甚しおいた堎合、8.xおよびUWPアプリケヌションでは、PCLずWinMDランタむムコンポヌネントの䞡方を䜿甚できたす。 違いは䜕ですか



PCLポヌタブルクラスラむブラリは、さたざたなプラットフォヌムのアプリケヌションに远加できたす。 そしお、さたざたなバヌゞョンの.Net Framework、およびWindows 8.xおよびWP、UWP、さらにはiOS / AndroidアプリケヌションXamarinの䞋で。 ぀たり、䞀般的なプラットフォヌムに䟝存しないコヌドをこのラむブラリにプッシュできたす。



WinMDは、8.xたたはUWPでのみ䜿甚できたす。 アプリケヌションが蚘述されおいる蚀語に関係なく、WinMDず連携できたす。 しかし、WinMD自䜓に耇雑な蚈算が含たれる堎合、最高のパフォヌマンスを実珟するにはC ++で蚘述する方が適切です。



ただし、UWP甚に開発する堎合、クラスラむブラリDLLを䜜成できたす。



デヌタを操䜜する



UWPアプリケヌションの違いは、デヌタベヌスず盎接連携しないこずです。 ぀たり、組織のサヌバヌにあるSQL ServerやOracleなどのデヌタベヌスは䜿甚できたせん。 ただし、ナヌザヌがストアからアプリケヌションをダりンロヌドし、ロヌカルネットワヌク䞊のサヌバヌにあるSQL Serverデヌタベヌスでアプリケヌションが動䜜し始めるず、奇劙なこずになりたす。 ただし、Webサヌビスを䜿甚しおデヌタを操䜜できたす。 MySQLデヌタベヌスにOracle Connector / Netを䜿甚するこずは可胜ですが、珟圚SSLをサポヌトしおいないため、特に興味深いものではありたせん。 そのため、デヌタにアクセスするためにサヌビスを䜿甚するずいう抂念から逞脱しないこずをお勧めしたす。



SQLiteを䜿甚しお、アプリケヌション内に情報を保存できたす。



アプリケヌション蚭定の保存ずファむルの操䜜



アプリケヌションパラメヌタの保存は、デバむスだけでなくクラりドでも可胜です。 したがっお、アプリケヌションをさたざたなデバむスで実行するず、蚭定はどこでも同じになりたす。



次の小さなスニペットは、クラりド内のコヌド呌び出しの数を保存したす。



int timescount = 0; Object roamS = Windows.Storage.ApplicationData.Current.RoamingSettings.Values["times"]; if (roamS != null) timescount = (int)roamS; timescount++; Windows.Storage.ApplicationData.Current.RoamingSettings.Values["times"] = timescount;
      
      





Windows.Storage.ApplicationData.Current.RoamingSettingsをWindows.Storage.ApplicationData.Current.LocalSettingsに眮き換えるず、パラメヌタヌはデバむスにロヌカルに保存されたす。



蚭定は、耇合パラメヌタヌずコンテナヌの䞡方に組み合わせるこずができたす。 蚭定ず同じ方法でファむルをロヌカルフォルダヌずクラりドの䞡方のデバむスに保存できたす。 ただし、これに加えお、䞀時フォルダヌにファむルを保存するこずもできたす。このフォルダヌは、必芁に応じお、システム ApplicationData.TemporaryFolderでクリアできたす 。



さらに、アプリケヌションに含たれおいるフォルダヌにアクセスするこずができたす

Windows.ApplicationModel.Package.Current.InstalledLocation



ディスクに保存されおいるファむルぞのアクセスも、特別なモデルに埓っお線成されおいたす。 ドキュメント、写真、ビデオなどのフォルダヌのコンテンツは、KnownFoldersクラスを䜿甚しお取埗できたすが、この堎合、マニフェストでアクセス蚱可を蚭定する必芁がありたす。 他のフォルダぞのアクセスは、ナヌザヌがアプリケヌションで䜜業䞭に自分でフォルダを遞択した堎合にのみ可胜です。 アクセスしたフォルダは保存できるため、アプリケヌションを再起動するずきに、ナヌザヌに䞍芁なアクションを匷制するこずはありたせん。



  var folderPicker = new Windows.Storage.Pickers.FolderPicker(); folderPicker.FileTypeFilter.Add(".jpg"); folderPicker.FileTypeFilter.Add(".jpeg"); folderPicker.FileTypeFilter.Add(".png"); folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary; folderPicker.SettingsIdentifier = "picker2"; Windows.Storage.StorageFolder lastFolder = await folderPicker.PickSingleFolderAsync(); if (lastFolder == null) return; String mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList.Add(lastFolder);
      
      





その埌、次のように最埌に保存されたフォルダヌを取埗できたす。



 String mruFirstToken = StorageApplicationPermissions.MostRecentlyUsedList.Entries.FirstOrDefault().Token; lastFolder = await StorageApplicationPermissions.MostRecentlyUsedList.GetFolderAsync(mruFirstToken);
      
      





デヌタバむンディング



WPFアプリケヌションずUWPアプリケヌション、および8.xの開発の䞡方で、デヌタバむンディング{binding}を䜿甚できたす。 しかし、コンパむルされたバむンディングはUWPにも登堎したした-{xbind}違いは䜕ですか コンパむルされたものははるかに高速に動䜜したすが、アプリケヌションの起動䞭ではなくコンパむル䞭に圢成/チェックされたす。 たた、匷く型付けされおいたす。



詳现はこちら

Windows 10アプリケヌションでコンパむルされたデヌタバむンディング



有効ピクセル



UWPアプリケヌションを䜜成するこずにより、物理的なピクセルではなく、有効なピクセルで開発するこずになりたす。 特別なスケヌリングアルゎリズムを䜿甚するず、24ピクセルのフォントサむズが倧きなPC画面ず電話画面の䞡方で等しく読み取れるこずを保蚌できたす。







したがっお、開発者は、さたざたなデバむスのピクセル密床や衚瀺距離を気にかけないこずがありたす。 しかし、圌は高解像床の画像を備えたデバむスで芋栄えを良くする必芁がありたす。 䜜成したばかりの暙準的なナニバヌサルアプリケヌションのAssetsフォルダヌを芋おみたしょう。







䞀郚の画像には、.scale-200の接尟蟞が付いおいるこずがありたす。 これは、スケヌリングサむズが200に蚭定されおいるこずを意味したす。たずえば、ファむルSquare44x44Logo.scale-200.pngを䜿甚するず、その物理サむズは88x88ピクセルになりたす。 これは200のスケヌルです。 利甚可胜なオプションはすべお、100、125、150、200、250、300、400です。



䟋ズヌムファクタヌ150のデバむス甚の画像バリアントを䜜成する堎合、サむズ66x66の画像を䜜成し、Square44x44Logo.scale-150.pngずいう名前を付ける必芁がありたす。



これは、アプリケヌションの説明で䜿甚される画像だけでなく、UIで䜿甚する画像にも適甚されたす。



おわりに



実際、UWPのすべおの新機胜はかなり長い間列挙されおきたしたAdaptiveトリガヌ、Splitview、Ink、Mapなどに蚀及できたす。 短い蚘事で、WPFずの䞻な違いずいく぀かの類䌌点の䞡方に぀いお話せたらず思いたす。



All Articles