矛盾する要件があるようです。私は最初の列としてチェックボックスを持つDataGridを持っています。ユーザーは、ダブルクリックではなく、シングルクリックでチェックボックスを選択できるようにします。DataGridでScrollIntoViewを使用し、チェックボックスの動作が変更されました
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
ユーザーも彼らは(数百行が存在することができる)の行を指定することができますコントロール:私はDataGridTemplateColumnと、このようなチェックボックスを使用することによって実現することができました。ビューにない行が指定されている場合は、スクロールして表示する必要があります。 DataGrid_SelectionChangedイベントのコードビハインドでイベントハンドラを追加しました。もともと私はScrollIntoViewコマンドを使用していましたが、オフスクリーンの行はハイライトされていましたが、グリッドはスクロールして表示されませんでした。フォーカスコマンドを追加して、行をスクロールして表示することができました。だから今イベントハンドラは次のようになります。
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid dg = (DataGrid)sender;
if (dg.SelectedItem == null) return;
dg.ScrollIntoView(dg.SelectedItem);
dg.SelectedItem.Focus();
}
今私はビューに、元の問題に行スクロールだが、あなたが経由に移動しないこと(他の行のチェックボックスをチェックします行コントロールにジャンプ)を2回クリックする必要があります。手動で行を移動させてダブルクリックが必要な原因は何ですか?
私はdg.SelectedItem.Focus()メソッドを取得できませんでした。あなたが持っているコードはこれでいいですか?それに関係なく、私はdataGridを使ってselectedItemをビューにスクロールさせることができました(別のコントロールではselectedItemを設定します)。また、シングルクリックチェックボックスdataTemplateは他のすべての行の魅力のように働きました...あなたのコード例に欠けているものがありますか? – philt5252
あなたの権利は、コピーして貼り付けたと思っていましたが、私はたくさんのことをしようとしていましたが、私はもはや問題の原因を確かめることはできませんが、答えを見つけました。 – Tod
少なくともそれは働いています:P – philt5252