ユーザーコントロールのPreviewMouseDownイベントでDataGridを設定しています。ユーザーがマウスをセルに移動すると、セルの内容に基づいて実行するアクションが設定され、ユーザーがクリックすると、どのマウスボタンに関係なく、アクションが実行されるという考え方です。
私のイベントハンドラー(C#):
private void LadderMouseClick(object sender, System.Windows.Input.MouseButtonEventArgs e) {
if (m_ActiveAction != null) {
m_ActiveAction();
}
e.Handled = true;
}
My DataGrid(XAML):
<DataGrid AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding Source={StaticResource sourceCollection}}" Name="DataGrid" RowDetailsVisibilityMode="Collapsed" IsReadOnly="True" Height="600" MouseLeave="DataGrid_MouseLeave" MouseEnter="DataGrid_MouseEnter" PreviewMouseDown="LadderMouseClick" PreviewMouseDoubleClick="LadderMouseDoubleClick" VerticalScrollBarVisibility="Hidden" SelectionUnit="Cell" SelectionMode="Single">
これは機能し、ユーザーがDataGridを右クリックまたは左クリックしたときにアクションを適切に実行します。ただし、問題は、ユーザーが右クリックすると、マウスが置かれているセルが選択されることです(セルの周囲に黒い境界線が表示されます)。彼らが左クリックしたとき、これは起こりません。
なぜ彼らは異なった振る舞いをしているのですか?それらは同じように扱われるべきではありませんか?私が見逃している本当に単純なものはありますか?
前もって感謝します!
編集:
これまで、DataGrid.UnselectAll()、DataGrid.UnselectAllCells()、DataGrid.SelectedIndex = -1、およびDataGrid.CurrentCell = default(DataGridCellInfo)を試しました。それらのどれも私のために働いていません。
編集#2:
それが役立つ場合は、DataGridTemplateColumnsとTextBlocksを使用してデータを表示しています。これがこの動作を引き起こしている可能性がありますか?
解決策:
これは、PreviewMouseRightButtonDownイベントとPreviewMouseDownイベントをDataGridに追加するというPeterHansenの提案によって解決されました。