公式の方法 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で公開してるのでモデルとバインドすれば簡単にショートカットを変更できますし、変更結果を保存できます。

3時間ぐらい悩みました。 IBehaviorを実装するときにActionCollectionを返すActionsプロパティを公開するのですがこんな感じで デフォルトの値をnew ActionCollectionにしてると ActionCollectionにいれた例えばInvokeCommandActionなどにDataContextが伝播されず、Commandがnullになってしまいます。 めちゃくちゃ悩んでたんですけど、なにやら公式のBehavior SDKはオープンソースだったらしく、公式のソースを見ました。 どうやらActionsプロパティのデフォルトはnull Actionsプロパティをgetterのみとし、getterでインスタンスを作成しているようです。 これでDataContextも伝播されます。 ちなみにActionsのアクション実行方法はInteractivityクラスをつかいます。

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

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 […]

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ランタイムコンポーネントを指定します。 今回は「CortanaSampleService」というWindowsRuntimeコンポーネントを作成しました。 次に元のUWP側の参照マネージャからさきほど作ったWindowsRuntimeコンポーネントを参照します。 マニフェストファイルを編集します。 宣言タブからAppServiceを追加し、名前を「VoiceAppService」、エントリポイントを「CortanaSampleService.SampleVoiceService」としました。 AppServiceを作成する 先ほど作ったWindowsRuntimeComponentに「SampleVoiceService」というクラスを作ります。

これでCortanaにしゃべりかけるとアプリがバックグラウンド起動します。 正常応答を返す 先ほどのSampleVoiceServiceクラスの「ここにレスポンス処理を書く」の部分に以下の処理を書くとCortanaが正常応答を返します。

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

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