2009-04-09 10 views
10

私はWPFでListViewコントロールのいくつかの奇妙な動作があります。wpf listviewがフォーカスを失った

私たちはC#でアプリケーションを開発しています。

一部のアイテムでListViewを作成し、SelectedIndexを の中のあるインデックスに設定しました。その後、ListViewの任意の場所でマウスをクリックして、 を押して、Up/Dowsのキーボードキーを使用してナビゲートすると、すべてが完全に機能します。しかし、 フォーカスを別のコントロールに移動し、フォーカスをListView コントロールにプログラムで戻そうとすると、問題が発生します。

ListViewにフォーカスが当てられますが、 キーボードでナビゲートしようとすると、現在の選択がキャンセルされ、最初の項目が に設定され、リスト内の最初の項目からナビゲーションが開始されます。

フォーカスをListViewコントロールの.Focus()メソッドを呼び出すことによって設定します。

ListViewコントロールのフォーカスも同じですが、SelectedIndexに有効な値がある場合でも、実際には フォーカスにある項目はありません。

お願いします。 ListViewコントロールにプログラムでフォーカスを設定して にする方法はありますか?

私のリストビューの選択されたインデックスが、フォーカスされたアイテムと異なることがわかりました。 誰ですか?

selectedindex_changedイベントで私は選択したインデックスを修正項目(5)に設定しましたが、矢印キーを押すと項目が変更されました。選択されたインデックスは5に固定されていますが、現在のアイテム(その周りにドットの枠線で示されています)が矢印キーの位置に移動したことを意味します。とにかに私のselecteditemは5に固定されていますが、私のscrollviewsは現在の項目がその位置に移動します。

このコードはlistView1_SelectionChangedにあります: listView1.SelectionMode = SelectionMode.Single; listView1.SelectedIndex = 5;私はこれ以上problomについて知らない

<l:PlainView x:Key="tileView" 
      ItemTemplate="{StaticResource centralTile}" 
      ItemHeight="120" ItemWidth="130" /> 

私のリストビューは、変更のビューを持っています。それは独立してその項目のフォーカスを持つことができるという点で

よろしく

+1

あなたはこのソリューションを見つけましたか?私はまったく同じ問題を抱えており、それを理解することはできません! –

+0

.Focus()は、一般的にどのGUI /フレームワーク/言語でも悪い習慣ではありませんか? –

+0

それでは、どうやって焦点を設定しますか? – Sam

答えて

6

リストビューは、おそらく、リストボックスがする同じ問題に苦しんでいます。

私はリストボックスを集中したいとき、私はこのような何かを実行する必要があります。

listBox1.Focus(); 
if (listBox1.Items.Count > 0) 
{ 
    var index = listBox1.SelectedIndex; 
    if (index < 0) index = 0; 

    var item = listBox1.ItemsContainerGenerator 
        .ContainerFromIndex(index) as ListBoxItem; 
    item.Focus(); 
} 

だから、これはListBoxのは、それが焦点を当てて任意の項目のいずれかの選択した項目、または含まれている場合、リストボックスを焦点を当てていますが、選択されている場合は最初の項目。

私はWPFでListViewを使用したことはありませんが、ListBoxの代わりにListViewを使用し、ListBoxItemの代わりにListViewItemを使用して同様の方法でハッキングする可能性があります。

+1

ListBox/ListViewにFocusable = Falseを設定して、独立したフォーカスを取得できないようにして、次に使用することをお勧めします。 if(uiListBox.SelectedItem!= null){(UIElementとしてのuiListBox.SelectedItem).Focus ();} – rmoore

+4

ええ、私はFocusable = Falseをホストコントロールに設定しておきましたが、リストが空のときには妙なフォーカスの問題があります。時々あなたはまだ空のリストの中でフォーカスをしたいので、リスト固有のショートカットキーなどをキャッチすることができます。おそらくバインディングトリガーでItems.Countにフォーカスを当てれば、よりうまくいくでしょう。 –

+0

ListViewはListBoxの子ですので、あなたの例は私のためにうまく機能しました。私が変更したのは、listBox1.SelectedIndexを0に設定することです(index <0)ので、フォーカスと選択された項目が一致する場合のみです。 – Sam

関連する問題