1

誰かが私を助けてくれることを願っています...

Josh Smith は、「Model-View View-Model を使用した WPF アプリ」に関する優れた記事を作成しました。彼の記事には、次のコード サンプルが含まれていました。

コード サンプルをダウンロードしてアプリを実行し、すべての顧客を表示する場合は、会社 (たとえば 4 番目の会社) を選択し、[新しい顧客の作成] をクリックして (新しい顧客のタブが開きます)、[新しい顧客] をクリックします。 [すべての顧客] タブをクリックし、キーボードを使用して、選択したアイテムを現在選択しているアイテムのすぐ上のアイテムに移動しようとしましたが、移動しません! 代わりに、セレクターは再び上から始まります。

なぜこれが起こるのかはわかりませんが、上をクリックすると、リストの一番上からではなく、1 つ上に移動するようにしたいと考えています。これは FocusManager と関係があると思われますが、よくわかりません。

コントロールがこのように動作する理由を誰かが知っていますか? このコードを変更して、選択したアイテムを「リセット」しないようにするには、どのようなアプローチが必要ですか?

このテンプレートに基づいてプロジェクトを実装しました。機能上の理由から、リセットせずにキーボードでセレクターを上下に移動する必要があります。

4

1 に答える 1

1

あなたが提供した例では、 IsSelected プロパティを設定しても論理フォーカスには影響しないため、デフォルトでフォーカスが設定されます。私が現在考えている回避策は、コードビハインドの要素にフォーカスを強制することです。例として、次のように listview の selectionchanged にハンドラーを追加します。

  private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
    if (e.AddedItems.Count == 0 || e.RemovedItems.Count > 0) return;
    var item = (CustomerViewModel) e.AddedItems[0];
    var container = (UIElement) listView1.ItemContainerGenerator.ContainerFromItem(item);
    container.Focus();
  }
于 2010-02-06T19:54:46.813 に答える