Mam DataGrid skonfigurowane z zdarzenie PreviewMouseDown w kontroli użytkownika. Chodzi o to, że kiedy użytkownik przenosi mysz do komórki, ustawia akcję, która ma działać w oparciu o zawartość komórki, a akcja zostanie uruchomiona, gdy użytkownik kliknie, niezależnie od tego, który przycisk myszy.
Moja obsługi zdarzeń (C#):WPF DataGrid PreviewMouseDown nie obsługuje klikania prawym przyciskiem myszy zgodnie z oczekiwaniami
private void LadderMouseClick(object sender, System.Windows.Input.MouseButtonEventArgs e) {
if (m_ActiveAction != null) {
m_ActiveAction();
}
e.Handled = true;
}
Moje 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">
To działa, i prowadzi działania poprawnie, gdy użytkownik w prawo lub w lewo kliknięć nad DataGrid. Problem polega jednak na tym, że gdy użytkownik kliknie prawym przyciskiem myszy, komórka, w której znajduje się mysz, zostaje wybrana (wokół komórki pojawia się czarna ramka); tak się nie dzieje, gdy kliknęli w lewo.
Dlaczego zachowują się inaczej? Czy nie powinny być traktowane w ten sam sposób? Czy jest coś bardzo prostego, czego mi brakuje?
Z góry dziękuję!
EDIT:
mam tak daleko próbował DataGrid.UnselectAll(), DataGrid.UnselectAllCells(), DataGrid.SelectedIndex = -1, a DataGrid.CurrentCell = default (DataGridCellInfo). Żaden z nich nie pracował dla mnie.
EDYCJA # 2:
Jeśli to pomaga, używam DataGridTemplateColumns z TextBlocks do wyświetlania moich danych. Czy to może powodować takie zachowanie?
ROZWIĄZANIE:
ten został rozwiązany przez Peter Hansen jest sugestii co było dodać zdarzenie PreviewMouseRightButtonDown do siatki danych, jak również zdarzenia PreviewMouseDown.
Dzięki za odpowiedź, niestety to chyba nie naprawiło. Być może zainteresuje cię to, mimo że mój DataGrid jest ustawiony na Single SelectionMode, wiele komórek można podświetlić, jeśli kliknę po dodaniu lub usunięciu elementu. Pozostałe wybrane komórki wydają się mieć niebieskie obramowanie zamiast czarnego. –
Mam zaktualizowaną odpowiedź - mam nadzieję, że to pomoże ci teraz .. –
Oh wow, to jest interesujące, dodając poprawkę PreviewMouseRightButtonUp. Mógłbym przysiąc, że próbowałem tego wcześniej, ale faktycznie wypróbowałem PreviewMouseRightButtonDown, przed którym nie działałem. Dzięki za pomoc! –