私はC#でWindows 8用のアプリケーションを開発していますが、非常に厄介なことは、すべてのテキストボックスにフォーカスが失われてもタッチキーボードが画面上にとどまることがあることです。Windows 8 - タッチキーボードを解除するには?
keyboard dismissal logic white paperを読んでいます。これは、コントロールからコントロールに切り替えるときに、コントロールがキーボード入力を受け付けなくても、キーボードをオンにできることを説明しています。私のすべてのコンテンツは、GridViewまたはListViewでホストされているので、これは私の場合です。ユーザーが画面上の任意の項目をクリックすると、タップはこれらのコントロール上に表示されます。これはキーボードが画面の半分を占め、キーボードを閉じる方法がないため、非常に面倒です。
テキストボックスを無効にするように設定しようとしましたが、影響はありませんでした。キーボードを取り外す唯一の方法は、非常にハッキリなボタンに焦点を合わせることです。
私は "AutomationPeer"で何かをする必要があると思っていましたが、正確に何をするのか明確ではありません。この動作を無効にする方法はありますか?
編集: 私はこれを理解しました。目標は、whitepaperにリストされていないGridViewおよびGridViewアイテムのコントロールタイプに変更することです。ここで私はそれは私がキーボードを却下することができなかったグリッドのコードは次のとおりです。
public class KeyboardUnfocusableGridView : GridView
{
private class KeyboardUnfocusableGridViewAutomationPeer : GridViewAutomationPeer
{
public KeyboardUnfocusableGridViewAutomationPeer(GridView owner)
: base(owner)
{
}
protected override AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.Custom;
}
}
private class KeyboardUnfocusableGridViewItemAutomationPeer : GridViewItemAutomationPeer
{
public KeyboardUnfocusableGridViewItemAutomationPeer(GridViewItem owner)
: base(owner)
{ }
protected override AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.Custom;
}
}
private class KeyboardUnfocusableGridViewItem : GridViewItem
{
protected override AutomationPeer OnCreateAutomationPeer()
{
var baseItem = base.OnCreateAutomationPeer();
return new KeyboardUnfocusableGridViewItemAutomationPeer(this);
}
}
protected override AutomationPeer OnCreateAutomationPeer()
{
var baseItem = base.OnCreateAutomationPeer();
return new KeyboardUnfocusableGridViewAutomationPeer(this);
}
protected override Windows.UI.Xaml.DependencyObject GetContainerForItemOverride()
{
return new KeyboardUnfocusableGridViewItem();
}
}
それは私が単純なことを行うには、このくらいのコードを記述する必要があることが残念です。これは私が使用する必要があるItemsControl
のそれぞれについてこれを行う必要があるので、これは間違いなく最適ではありません。
すべてのコンテンツは、GridViewコントロールまたはリストビュー内にある場合は、あなたがする必要があるすべては、IsHitTestVisibleプロパティを設定されていますfalseにすると、テキストボックスはフォーカスを受け入れることができないため、キーボードはポップアップしません。残念ながら、スクロールも失われます。ただのFYI ... –
素晴らしい解決策、私はこの問題で絶望的でした:)。 ListViewでも同様のテクニックが使えます。 –
解決策を以下の回答に移動して、回答を得られないリストから取り除くことができますか?ありがとう。 –