チョークではなく、UWPから3つのドーナツを食べる

こんにちは、Habr! UWPはWindows 10用のプラットフォームであり、1つのAPIセット、1つのアプリケーションパッケージ、および1つのストアを使用してアプリケーションを開発できます。 これは、Windows10を実行しているすべてのデバイス(コンピューター、タブレット、電話、Xbox、HoloLens、Surface Hubなど)でアプリケーションが動作することを保証するのに十分です。 この記事では、UWPを使用する際の3つのよくある質問(アイコンのカスタマイズ、ウィンドウでの設定の表示、アクセスの制限)について回答します。 猫の下を見てください!



この記事は、 Microsoft Developerコミュニティのアクティブな参加者であるAlexei Plotnikovと共同で作成されました。







ドーナツ1:色のアイコン



挑戦する



UWPアプリケーションでは、アイコンなどのインターフェイス要素の色をユーザーが選択できるようにする必要があります。



背景



アプリケーションの外観をカスタマイズする機能は、ユーザーインタラクションの重要な要素です。 背景画像とカラーパレットを設定すると、ユーザーはアプリケーションにできるだけ深く没頭でき、その保持力が大幅に向上します。 さまざまなインターフェイス要素の色をカスタマイズする機能に加えて、アプリケーションアイコンの色を動的に変更する必要がある場合がありますが、PNGラスターイメージはそのまま使用されることが多く、動的な再描画は難しいようです。



解決策



BitmapIconを使用します



BitmapIconはIconElementから継承され、ドキュメントではAppBarButtonのIconプロパティのコンテンツとして説明されていますが、これにもかかわらず、このクラスはUIの任意の場所で使用できます。 Imageクラスとは異なり、BitmapIconクラスにはForegroundプロパティがあります。これにより、指定した画像を余分な労力なしで再描画できます。 PNG画像へのパスを指定し、前景色を設定するだけです。 その後、内部アルゴリズムは画像自体を再描画します。



SolidColorBrushソリッドカラーブラシのみを使用して、元のPNGの上に画像が染色されることを覚えておくことが重要です(その他は無視されます)。 多くの色で本格的な画像を使用する場合、この操作の前に画像のすべての不透明な領域が同じ色で塗りつぶされます。







ドーナツ2:ウィンドウ設定



挑戦する



ポップアップパネルにUWPアプリケーションの設定を表示する必要があります。



背景



UWPのドキュメントに記載されている推奨事項に従って、別のページを使用してアプリケーションを構成する必要がありますが、これはすべてのアプリケーションに適しているわけではありません。 Windows 8には、設定付きの組み込みサイドバーを呼び出すSettingsFlyoutクラスがありましたが、Windows 10では、このクラスは下位互換性のためにのみ保存されており、UWPアプリケーションではサポートされていません。



解決策



SplitViewを使用します



SplitView要素はポップアップとコンテンツで構成され、ハンバーガーメニューを作成するために最もよく使用されますが、SettingsFlyoutの置換を作成するのにも理想的です。



<SplitView DisplayMode="Overlay" PanePlacement="Right" IsPaneOpen="False" HorizontalAlignment="Right" Canvas.ZIndex="2"> <SplitView.Pane> <Grid> <!--  --> </Grid> </SplitView.Pane> </SplitView>
      
      





上記のXAMLは、ページのヘッドグリッドに配置し、SplitView.IsPaneOpenプロパティをtrueに設定することにより、コードでパネルの呼び出しを実装するのに十分です。 この場合、Contentプロパティは完全に無視されることに注意してください。



追加のボーナスは、モバイルデバイスで[戻る]ボタンをクリックしたとき、またはPCでパネルの外側をクリックしたときにパネルを非表示にする既製の実装です。



また、宿題として、ポップアップパネルの幅を画面の幅にスナップして、垂直方向のモバイルデバイスではパネル全体が画面全体に表示され、PCでは水平方向の最大3分の1の幅が表示されるようにすることができます。



ドーナツ3:アクセス制限



挑戦する



UWPアプリケーションの安全なページへの不正なユーザーアクセスを制限する必要があります。



背景



一部のUWPアプリケーションでは、アプリケーションの個々のページの表示を許可するか許可しないかに応じて、ユーザーが異なるアクセスレベルを持つシナリオがあります。 アプリケーションの新規起動の場合、ユーザーアクセスの現在のレベルを監視し、結果に応じて、保護されたページにアクセスするためのボタンをアクティブまたは非アクティブにすることができます。 ただし、たとえばWindows通知センターから安全なページに直接移行する場合があります。



解決策



WhileループとともにAsync / Awaitを使用します。



この問題の解決策は非常に明白であり、ページの先頭にある検証コードの実装に基づいているという事実にもかかわらず、はるかに洗練された解決策があります。

ページの開始メソッドで、最初のクエリと割り当ての実行を開始する前に、次のコードを(VB.Netに)配置します。



 Await Task.Run(Sub() While UserStatus <> CurentPageAccess End While End Sub)
      
      





ここで、UserStatusは現在のユーザーのアクセスレベルで、CurentPageAccessはページへの許可されたアクセスレベルです。 Awaitのおかげで、タスク内のプロシージャの実行が完了するまで(Task)、コードの実行は中断されますが、インターフェイスはユーザーの操作に応答したままになります。 検証コードを追加するソリューションとは対照的に、このソリューションでは、以前に保存したデータを使用してバックグラウンドユーザーログインを実装したり、特定のページの外部でオーバーレイログイン手順を実行したりできます。 このアプローチでは、保護された各ページでこのコードのみを複製し、ログインインジケーターを表示して、ユーザーに待機が必要であること、または入力するデータを入力する手順を知らせるだけで十分です。



重要な注意事項



バックグラウンドスレッドでエンドレスループを使用すると、プロセッサの負荷が大幅に増加するため、このレシピは、メインコードが実行される前にわずかな追加待ち時間が必要なシナリオでのみ使用することをお勧めします。 たとえば、上記のユーザーのバックグラウンドログイン。



以下のコメントでは、目的の結果を期待してループの実行を一時停止することが有用な他の(おそらくより明白な)状況を提案するか、この問題に対する独自の解決策をもたらします。



All Articles