マイク、
Windows コントロールをラップし、ラップされたウィンドウ グリッドの選択変更イベントをキャッチすることで、この問題を解決しました。
コントロールで、コントロールの Loaded イベントをフックし、読み込まれたときにブール値のプライベート メンバー変数を true に設定します。次に、内部データ グリッドの選択変更イベントをキャッチするときに、コントロールが読み込まれている場合にのみ、独自の選択変更イベントを発生させます。これが完了したら、OnApplyTemplate サブに戻り、内部データ グリッドの選択されたインデックスを -1 に、選択された項目を何も設定しないように設定できます。コントロールの読み込みが完了する前にインデックスと項目の設定が行われるため、selection changed イベントは発生しません。タブ付き環境とタブなし環境の両方でこれを試しましたが、問題なく動作するようです。もう少し難しい問題に移りますが、Windows データ グリッドを並べ替えると (データが ItemsSource にバインドされている間)、表示されたデータの一番上の項目が常に選択されることに気付いたかもしれません。もちろん、これは選択変更イベントを発生させ、以前に選択されていないアイテムに移動します。私が見る限り、選択すべきではありません。これを処理するには、もう少しトリッキーなコーディングを行う必要があります。内側のグリッドの選択が変更されたイベントをキャッチし、その選択された項目を見ると、選択された項目が何も設定されていない場合がほとんどありません。 . 選択がクリアされた場合)、または (ヒント) 列がソートされている場合。並べ替えを行う場合、発生するイベントが 2 つあります。1 つ目は項目の選択解除 (SelectedItem は Nothing) です。2 つ目は、リストの一番上の項目の選択です (SelectedIndex 0)。ここで、内部グリッドの選択変更イベントのイベント ハンドラーにフラグを設定し、項目が何もないという事実をキャッチした場合、前に選択された項目を追跡し、内部データ グリッドの選択された項目を設定できます。前に選択したアイテムに。
これは問題をうまく解決し、いつものように、Windows コントロールをラップするときに望ましくない結果が生じる可能性がありますが、私が知る限り、ロードの問題で最初の行が選択されていることを回避するには、これが唯一の方法のようです。しかし、これはある時点で M$ によって修正されるだろうと想像することしかできません。
これが役に立てば幸いです。
ありがとう、
スコット