2011-10-25 8 views
0

矛盾する要件があるようです。私は最初の列としてチェックボックスを持つ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回クリックする必要があります。手動で行を移動させてダブルクリックが必要な原因は何ですか?

+1

私はdg.SelectedItem.Focus()メソッドを取得できませんでした。あなたが持っているコードはこれでいいですか?それに関係なく、私はdataGridを使ってselectedItemをビューにスクロールさせることができました(別のコントロールではselectedItemを設定します)。また、シングルクリックチェックボックスdataTemplateは他のすべての行の魅力のように働きました...あなたのコード例に欠けているものがありますか? – philt5252

+0

あなたの権利は、コピーして貼り付けたと思っていましたが、私はたくさんのことをしようとしていましたが、私はもはや問題の原因を確かめることはできませんが、答えを見つけました。 – Tod

+0

少なくともそれは働いています:P – philt5252

答えて

0

私は、以下のコードで作業するようにしました。これは、セルにフォーカスを移す際に接線に関連するポストからインスピレーションを受けています。 ScrollIntoViewが動作しない理由、または最後の3行を実行することが、チェックボックスを無効にしないで、ビューをスクロールする行を取得する方法の1つではないかというヒントはありません。

関連する問題