2012-07-31 87 views
7

WPFのWinFormsからこの機能を実現する方法はありますか?ListViewでアイテムのフォーカスを設定するWPF

ListView.FocusedItem = ListView.Items[itemToFocusIndex] 

私は手動でWPFのListViewに項目のフォーカスを(選択しない)を設定しようとしています。 から.Windows.Controls。おかげさまで

答えて

18

を返す必要があります。 This linkは、WPFでのフォーカスに関する詳細を提供します。

あなたがこれを行うことができ、次のいずれか

ListViewItem item = myListView.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem; 
item.Focus(); 

それはあなたもこれを追加し、アイテムの位置にListViewをスクロールしたい場合は

Keyboard.Focus(item); 

を呼び出すことも可能です:

myListView.ScrollIntoView(item); 

重要なお知らせ:これをwor kの場合は、にVirtualizingStackPanel.IsVirtualizing="False"を設定する必要があります。これにより、パフォーマンスが低下する場合があります。この添付プロパティが必要な理由は、ListView(デフォルトでは)が仮想化されている場合、ContainerFromIndex()nullを返すように、画面に表示されない項目に対してはListViewItemsが作成されないためです。

+0

あなたのコードの背後にあるアイデアはありますが、_myListView.Items [itemIndex]としてIInputElementとして動作していません; _は_null_を返します。 ListViewの項目は私のカスタムクラスのインスタンスで、実行時にinstaceプロパティに従って適切なスタイルが選択されます。クラスは、それぞれクラスまたはインタフェースを実装することを継承しません。だから私はそれをIInputElementにキャストすることはできません... – jnovacho

+0

@jnovacho 'UIElement'から継承したコントロールは' IInputElement'を実装しています。あなたは 'myListView.Items [itemIndex]'からどんなタイプのオブジェクトを取得しますか? –

+0

私はそのコレクションからObjectだけを取得します。 – jnovacho

0

Keyboard.FocusedElementを使用して、リストビュー内のフォーカスされた要素を取得できると思います。キーボードフォーカスと論理フォーカス -

Keyboard.FocusedElement 

は、WPFでの焦点の2種類がありますフォーカスのある要素

+0

私は集中したアイテムを得る必要はありません、私は**フォーカスを設定する必要があります**。 – jnovacho

0
public void foucusItem(ListView.Item itemToFocusIndex){ 
     int count = 0; 
     foreach(ListView.Item item in YourListView){ 
       if(item == itemsToFocusIndex){ 
        ListView.Items[count].Focus(); 
        return; 
       } 
     count++; 
     } 
    } 
+0

Focus()メソッドはありません。フォームではなくWPFを使用しています! – jnovacho

+0

Focusableプロパティがtrueに設定されていることを確認します。 – Zac

+0

http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx Focus()メソッドがあると思います。メソッドの下半分についてのリンクを見てください。 – Zac

0
//to set focus write 
CollistView7.Items[TheIndItem].Selected = true; 
CollistView7.Select(); 
CollistView7.Items[TheIndItem].Focused = true; 
//when TheIndItem is the index 
0

ListViewアイテムはUIElementsなので、単にUIElement.Focus()を使用してください。例えばlistViewItem.Focus()またはbutton.Focus()などとなります。

関連する問題