- 追記1:PCでしか動作しません (電話だと
OnCreateAutomationPeer
を呼んでくれない) - 追記2:電話でも動作するもっと簡単な方法がありました
<!-- こうするとSIPが閉じない --> <Button IsTabStop="false" />
- 以下古い話
Aristeaの電話版とかでInputPaneが開いてる状態でボタンを押そうとすると InputPaneが閉じて操作しづらいとかそういうのがあります。
実際Aristeaでも使いづらくてどうにかしたいと思ってたところ、方法を見つけたので書いておきます。 このコードをプロジェクトに追加して、Button使ってるところで代わりにMenuStyleButtonを使うと、 ボタンを押してもInputPaneが閉じなくなります。
public class MenuStyleButton : Button { public class CustomButtonAutomationPeer : ButtonAutomationPeer { public CustomButtonAutomationPeer(Button owner) : base(owner) { } protected override AutomationControlType GetAutomationControlTypeCore() { return AutomationControlType.Menu; } } protected override AutomationPeer OnCreateAutomationPeer() { return new CustomButtonAutomationPeer(this); } }
やってることは、Controlに対してAutomationPeerを要求された場合に、カスタムのAutomationPeerを返答し、 さらにカスタムのAutomationPeerの中でAutomationControlType.Menuを返答すると、なんとInputPaneが閉じなくなります。
というのは、MSDNのこのへんにしれっと書いていました。
テキスト入力のコンテキストでフォーカスがテキスト入力フィールドから移動したときにキーボードの表示を持続させるには、カスタム コントロールに適切な UI オートメーションの AutomationControlType を使います。たとえば、テキスト入力シナリオの半ばでメニューを開くときに、キーボードを表示したままにするには、このメニューに Menu の AutomationControlType が必要です。
タッチ キーボードの表示への応答 - Windows app development
Aristeaはたぶん今日夜ぐらいに対応してリリース予定です。https://msdn.microsoft.com/ja-jp/library/windows/apps/mt185611.aspx