2009-03-28 15 views
1

私はWPF(VB)でキーボードナビゲーションのみに依存するプログラムを開発しています。ListBoxから移動するキーボードフォーカス

私のプログラムでは、最大20000項目を表示するリストボックスがあります。

リストボックスにキーボードフォーカスがあり、(ArrowDownを使用して)表示されている下部項目に移動するとき、フォーカスをリストボックスの外の次の項目に移動する必要があります。私は、PgUpとPgDownを使ってリストボックスの内容をスクロールし、テキスト検索を使って項目にジャンプします。

フォーカス/選択されたアイテムがリストボックスの最後/最初の表示アイテムであるかどうかを検出する方法はありますか?

もしそうなら、私はちょうど使用することができ、:

ListBox1.MoveFocus(New TraversalRequest(FocusNavigationDirection.Down)) 

答えて

2

私はあなたがこれをしないことをお勧めしたい、ユーザーインターフェースは、オペレーティングシステム内の他のユーザインタフェースでconsitesntly振る舞うべきです。

ターゲットのオペレーティングシステムでのユーザーインターフェイスの動作と一貫性のある代替ユーザーインターフェイスを考え出すと、ユーザーの方がより効果的です。

0

それはあなたの説明から少し明らかですが、あなたが探しているのいずれか:最後の項目が選択されている場合、リストボックスの外に移動する

  1. ナビゲーション。
  2. リスト内の最後の項目を超えてナビゲーションが試行されたときに、ナビゲーションがリストボックスからポップアウトすると、

の場合は、()がトリガーを使用して合理的な解決策は、おそらくされ、または選択した項目に基づいてイベントのために扱ういくつかのカスタムコードと選択した項目を変更し、あなたの目的です。私はTomの意見に同意する必要がありますが、このような場合は実装しないことをお勧めします。最後の項目はプログラムで削除されることなくフォーカスを選択できないためです。

代わりに()すると、Tabキーが押されたときにListBoxの自然な振る舞いが次のコントロールに移動することが私の経験ですキーも同様に動作します。リストの最後の項目に移動すると、フォーカスはリストボックスから外に出て、その親に応じて次のコントロールに移動します。

UPDATE:私はリストボックスのためにWPFのデフォルトの動作を記述していない上記の行動のように私の元のコメントを撤回する必要がしかし、それはあなたが、私はあると信じて、私は上記の行動を(表示される動作ですItemsControlを実装してItemTemplateを指定するときは、あなたの探している動作)次の例を見てください。偶然

<ItemsControl ItemsSource="{Binding ElementName=TheWindow, Path=ListOStrings}"> 
    <ItemsControl.Template> 
     <ControlTemplate TargetType="{x:Type ItemsControl}"> 
      <Border BorderBrush="Magenta" 
        BorderThickness="1"> 
       <ScrollViewer> 
        <ItemsPresenter /> 
       </ScrollViewer> 
      </Border> 
     </ControlTemplate> 
    </ItemsControl.Template> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Content="{Binding}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

、これは単にリストの各項目は、ほぼすべての他のコントロールへのピアとして直接配置制御のように振る舞うので、あなたが説明した動作を持っていることを起こります。

私はリストボックスの外にフォーカスを移動するための簡単なトリックを使用
0

: フォーカスが次のコントロールに自動的に移動するので、私は、私は再びリストボックスを有効にする、リストボックスを無効:)

Lst.IsEnabled = False 
Lst.MoveFocus(New TraversalRequest(FocusNavigationDirection.Next)) 
Lst.IsEnabled = True 
関連する問題