WPF:どのように無効にタブナビゲーションにも、矢印キーのナビゲーションを無効にせずに?
-
25-09-2019 - |
質問
私は、Tabキーを押したときに、フォーカスが(私は何か他のもののためにTabキーを必要とする)に移動しないように、私のウィンドウ内のすべてのコントロールでfalseに設定さIsTabStop
を持っています。しかし、この休憩を行うとキーナビゲーション矢印 - 私はListView
でアイテムをクリックして、アップ/ダウン押すと、もはや選択した項目を変更しません。
は無効タブナビゲーションに方法はありますが、キーナビゲーション矢印触れることなく?彼らは関連しているようです。
私はfalseに真とIsTabStop
にTabNavigation
を設定しようとしたが、それはどちらか動作しません。
<ListView ItemContainerStyle="{StaticResource ItemCommon}" IsTabStop="False">
<ListView.Resources>
<Style x:Key="ItemCommon">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle"/>
</Style>
</ListView.Resources>
</ListView>
解決
あなたのウィンドウ(またはあなたが仕事にタブを望んでいないコントロールの一部の祖先)にタブキーを飲み込むます。
あなたは鍵がタブのとき=真e.Handled PreviewKeyDownイベントとセットに取り付けることによって、それを飲み込むことができます。
ピュアコードの後ろます:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.PreviewKeyDown += MainWindowPreviewKeyDown;
}
static void MainWindowPreviewKeyDown(object sender, KeyEventArgs e)
{
if(e.Key == Key.Tab)
{
e.Handled = true;
}
}
}
また、キーボード等のハンドラを設定することができます
<Window x:Class="TabSwallowTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Keyboard.PreviewKeyDown="Window_PreviewKeyDown" >
<StackPanel>
<TextBox Width="200" Margin="10"></TextBox>
<TextBox Width="200" Margin="10"></TextBox>
</StackPanel>
</Window>
はいますが、対応するイベントハンドラが必要になります
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
e.Handled = true;
}
}
他のヒント
私が何をしたいことは、あなたのListView上の を一度にある[ KeyboardNavigation.TabNavigation の添付プロパティを設定することであると信じています。私はテンプレートのItemsControlでこれをやったし、私がコントロールにタブが右のリストボックスから出て、上に最初の項目が、追加のタブの意志]タブを選択しますListBoxのように期待するという行動を与えているようです次のコントロールます。
この方法は、あなたの次の例だからこれまでshortendことができる可能性があります。
<ListView ItemContainerStyle="{StaticResource ItemCommon}"
KeyboardNavigation.TabNavigation="Once" />
私はしかし、ListViewコントロールでこれをテストしていませんが、それはあなたのために働く場合、私は驚かないだろう。