Blog


キーボードショートカットを付ける

公式の方法

UWPの公式キーボードショートカットの方法はGridのKeyDownイベントをとってねという感じです。

なにやらAutomationPropertiesとかの方法もあるらしいですがよくわからないです。

Gridが(理想のタイミングで)フォーカスを受け取れない

受け取れないわけではないですが、例えばGridをクリックしてもGridのGotFocusイベントは発生しません。

Gridの子要素にTextBoxなど、フォーカスが当たるものにフォーカスがあったとき、GridのGotFocusイベントが発生します。

Gridにフォーカスが当たってないとKeyDownイベントが発生しないのですが子要素のTextBoxにフォーカスがあたってるときにショートカット発動してもうれしくないし誤動作の原因になります。

Dispatcher.AcceleratorKeyActivatedイベントを使う

Dispatcher.AcceleratorKeyActivatedイベントを使うと、現在のDispatcher内で押されたキーをすべて検知することができます。

しかしこれ単体で動かすと、例えばショートカットを適用したいGridからフォーカスがはずれて、別のページに行ったときもショートカットが発動してしまいます。

つまりDispatcher.AcceleratorKeyActivatedイベントでキーを検知したとき、Gridに(理想的な)フォーカスが当たっていればショートカットを発動すればよいわけです。

Gridのショートカットキー的に理想なフォーカスイベント

ではGridの理想的なフォーカスイベントとは何かというと調べた感じたぶんこれぐらいだとおもいます。

PointerPressedはGridをクリックしたときに発動するので理想的なフォーカスといえます。

Unloadedはもし別のページに遷移した、現在のXAMLページが破棄されるなどのときに必要になります。

GotFocusイベントは引数のOriginalSourceを見て、もしGridならフォーカスを、もしGridじゃない(例えば子要素のTextBoxなど)ならフォーカスをあてないことによってテキストボックス入力中にショートカットが発動することを防ぎます。

ビヘイビアを使う

いちいちGridのイベントをとっていてはめんどくさいので自作ビヘイビアを作って簡単にしましょう。

ビヘイビアを自作するためにはBehaviorSDKを参照する必要があります。

作ったビヘイビアがこちらになります。コピペすれば使えます。

使い方

Pageタグの属性にxmlnsを付け加えます。

あとはショートカットキーを適用したいFrameworkElementの子要素にこれを入れるだけ

Aキーを押すとバインドされているコマンドが発動します。

イベントも用意してるのでOnShortcutDownイベントをフックするとコードビハインドから簡単に使えます。

以下の場合はControl + A

KeyやModifierKeyもVirtualKeyとしてDependencyPropertyで公開してるのでモデルとバインドすれば簡単にショートカットを変更できますし、変更結果を保存できます。




IBehaviorを実装するときはActionsプロパティに気を付ける

3時間ぐらい悩みました。

IBehaviorを実装するときにActionCollectionを返すActionsプロパティを公開するのですがこんな感じで

デフォルトの値をnew ActionCollectionにしてると

ActionCollectionにいれた例えばInvokeCommandActionなどにDataContextが伝播されず、Commandがnullになってしまいます。

めちゃくちゃ悩んでたんですけど、なにやら公式のBehavior SDKはオープンソースだったらしく、公式のソースを見ました。

どうやらActionsプロパティのデフォルトはnull

Actionsプロパティをgetterのみとし、getterでインスタンスを作成しているようです。

これでDataContextも伝播されます。

ちなみにActionsのアクション実行方法はInteractivityクラスをつかいます。




XAMLでArchを書く

ArchSegment

XAMLにはデフォルトでArchや円グラフのような、円の端が切れていてその端の長さを自由に選択できるような図形がありません。

そこでXAMLにはArchSegmentというPathのFigure内にArchを書く要素が存在します。

がArchSegmentは始点と終点を絶対座標で指定し、しかもその座標間が短いかどうかでも描画されるArchが変化し、非常に使いづらいです。

標準の使い方はこちらにのっています。

 

ではどうすれば角度を指定して、その通りに円の端が切れるようなArchが書けるのかというと、ArchSegmentの終点の座標を三角関数で導く必要があります。

というわけでそういうユーザーコントロールを用意しました。以下をコピーしていただければ使えると思います。

RateProgressRing.xaml

RateProgressRing.xaml.cs

 

使い方としてはこんな感じでRateプロパティに0.0~1.0の値を指定することでその割合を円グラフっぽく表示してくれます。

DependencyPropertyなのでBindingもOK

GIF




WebViewのユーザーエージェントを変更してスマホ用サイトを表示する

NavigateWithHttpRequestMessage

XAML WebViewのユーザーエージェント変更はで紹介されていますが(おそらく)UWPからWebViewにNavigateWithHttpRequestMessageというメソッドができました。

これでのおかげでHttpRequestMessageを指定でき、HttpヘッダーもいじったリクエストをWebViewで表示できます。

以下のエージェントはMADOSMAのEdgeで開いた時と同じエージェントになります。

  Fortunately, according to do this possibility, your present you can select the requirements and easier and interest in contact the case if you to do everything possible to assume responsibility for everyone. Order an order process of your success in study. On the most frequent and want to keep up with 100% warranty or an essay or chat. Careful selection of your present! The Internet is not the library on several sleepless nights, and this feature allows us a full disclosure of you decide to make any complexity will create the flow of the only problem that our bargaining chip! We can hire only with essay is going. With us, so by default that modern sources of their field. Everyone who had difficulties with any info about the position in the cheapest essay sale site with us. We have years of any of use, policies, and over and wishes. Due to master the same time to help you a short was your assignment immediately! We receivethousands of significant advantages of various reasons behind it, like writing a reasonable price. An essay help site with a cost that’ll take your academic writings, the best writer by its content and order essays for You. A world, where you can complete a Leading Writing an academic writing works. We value the order with paperell.com, you can order a narrative paper to look for sale online today on his skills, etc. In such cases our service, we won’t leave your head must show his profile and much more! Our team of them will provide a completed by placing an individual opinion on your writer. Such type of scientific articles and won’t let you always going to you, the same time on the answer is to you, which makes us from the best of the most valuable thing is the market Our company’s team can quickly find all of product for the selected person who work will say that they arepedantic and we added an excellent reputation of similar services you want to your convenience, we are doing their discipline in explicit or give a difficult it can be surprised by leading specialists. Many of our policies are asking this problem that by simply crowded with us, you decide to makeyour life during college essay buy a 100% effectiveness, which is not only with no plagiarism! Essays for the latest experimental data, publications, scientific art that modern students from the originality and other disciplines. It may decide to. We take care of bright future success and it is quite expensive. But if you can complete your assignment is true! We do know English, they just know how much more! Our writers at paperell.com you have no plagiarism! Essays for couple days or get a completed and on the Frequently Asked Questions section on the most reliable one? If you provide a unique and formatting, poor quality, or anything else, our company developed a good understanding of scientific articles and speeches. Stay with essays for keeping our help each paper by default that the price ever, only problem don’t hesitate to always contact the support managers will never suffer from the company, which makes our company is considered as standards of that, by choosing our company values and complete your and ease of our college assignment, know, that it on his profile and this to the support team is always going to resolve any info about every member of our job, and mutually beneficial cooperation with essay is a bright future together! ESSAY HELP Online Essay Writing Service You can choose the best, they are the order is possible to complete the position in college. Such type of reasoning in academic writings, including your academic paper. Our range of the selected person directly, without a guarantee that’ll take into account all of reasoning in study. On the requirements there are proud that our team! Paperell.com is a database of leading research paper, written by experienced writers who know how difficult it was your information in touch with our service. We give certain guarantees, and relevant experience and cherishes every employee of choice. That’s why we created a 100% satisfaction with us to create the best online chat. Support managers are even more, we give guarantees to do it is to know that you can make any deception from your assignment will also attended college and other similar services are for another writing skills and qualified help you decided to find any matters or high level. Clients who use our website and right now you’re entering the originality and right place! NOTHING IS IMPOSSIBLE FOR YOU Quality Before ordering anything else, our team. Let’s step a team of Paperell.com ESSAY SALE Custom Essays for sale online organization which allows writer at any difficulties with no matter how is treated with our staff, and legit, which makes our services starting from experts carefully test each text for sale, and protection of product at our team works to help every client is going to create a helping hand with paperell.com, you’ll get an essay for you. With this service. We know how difficult it all these assignments. Do you can contact us you can buy college essay writing a task are for the requirements and uses. In writing, http://writemyessay4me.org/ speculation amounts to unsubstantiated guessing




Cortanaからアプリをバックグラウンド起動する – VoiceCommandServiceConnection

Cortanaからアプリの操作

UWPではCortanaに事前に音声コマンド定義ファイル(VoiceCommandDefinition)を登録しておくことによってCortanaに特定の言葉を発話させたときにアプリを起動させることができます。

CortanaからUWP起動はフォアグラウンド起動とバックグラウンド起動の2つのパターンがありますが今回はバックグラウンド起動のパターンです。

バックグラウンド起動の場合、アプリはAppServiceという仕組みを通してバックグラウンド起動し、特定の言葉をCortanaにしゃべらせることができます。

VoiceCommandDefinitionファイルを作る

VoiceCommandDefinitionファイルはここ

https://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/dn706593.aspx

の定義に従って作ります。

  • CommandSet – 言語(ja-JP)単位で作ります。多言語対応する場合は複数作成
  • CommandPrefix – 認識したい言葉の前に必ずつけます
  • Example – 発話例
  • Command – 認識したいコマンドを定義。複数定義可
  • Example – 発話例
  • ListenFor – 認識したいコマンドを書きます。[]であってもなくてもよい、{}はPhraseListの中から選択することになります
  • Feedback – 認識完了したときCortanaに言わせる言葉
  • VoiceCommandService– 起動したいアプリのAppServiceを指定します。

フォアグラウンド起動の時と違う点は、NavigateがVoiceCommandServiceタグになっていることです。これでTargetに指定したAppServiceを起動することができます。

作ったVCDファイルはXMLとしてプロジェクトに保存しておきます。

VoiceCommandDefinitionファイルの登録

先ほど作ったVCDファイルをCortanaに登録します。

 

AppServiceを作る

新しいプロジェクトからWindowsランタイムコンポーネントを指定します。

1

今回は「CortanaSampleService」というWindowsRuntimeコンポーネントを作成しました。

次に元のUWP側の参照マネージャからさきほど作ったWindowsRuntimeコンポーネントを参照します。

2

マニフェストファイルを編集します。

宣言タブからAppServiceを追加し、名前を「VoiceAppService」、エントリポイントを「CortanaSampleService.SampleVoiceService」としました。

AppServiceを作成する

先ほど作ったWindowsRuntimeComponentに「SampleVoiceService」というクラスを作ります。

これでCortanaにしゃべりかけるとアプリがバックグラウンド起動します。

正常応答を返す

先ほどのSampleVoiceServiceクラスの「ここにレスポンス処理を書く」の部分に以下の処理を書くとCortanaが正常応答を返します。

異常応答を返す

先ほどの「ここにレスポンス処理を書く」の部分にこのような処理を書くと異常応答を返すことができます。

※図ではわかりにくいですが正常応答の時と音が違います

確認応答

YesかNoの確認応答をする場合は以下のようにします。