Я следовал this tutorial для реализации Drag & Drop on my datagrid. Я изменил его в соответствии с this link, чтобы иметь возможность перемещать элементы между группами.Событие MouseMove предотвращает «открытие» ComboBox
В моем документе есть столбец с кнопкой, поэтому я последовал за this answer, чтобы снова использовать кнопку. У меня также есть 3 столбца с ComboBoxes, и они не могут быть использованы (вы можете щелкнуть их, и тогда они выглядят как комбинированные поля, но второй щелчок не расширяет его).
Два из них определяются как DataGridComboBoxColumn
и один определяется с DataGridTemplateColumn
и ComboBox
в теге DataGridTemplateColumn.CellEditingTemplate
.
Первые два, как это:
<DataGridComboBoxColumn Header="Entity"
ItemsSource="{StaticResource tl}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValueBinding="{Binding Entity}"
x:Name="cmbEntity"></DataGridComboBoxColumn>
Определение DataGrid выглядит следующим образом:
<DataGrid Grid.Row="1" Name="myGrid" IsManipulationEnabled="True" ItemsSource="{Binding Source={StaticResource cvs}}" AutoGenerateColumns="False"
RowEditEnding="myGrid_RowEditEnding" PreviewKeyDown="myGrid_PreviewKeyDown" SelectedCellsChanged="myGrid_SelectedCellsChanged"
AllowDrop="True" MouseMove="DataGrid_MouseMove" PreviewMouseLeftButtonDown="DataGrid_PreviewMouseLeftButtonDown" Drop="DataGridView_Drop">
И как уже упоминалось выше, методы реализованы в соответствии с учебных пособий. Я попытался использовать e.Handled=false
в обработчиках событий, но это не помогло (и это, вероятно, бесполезно, так как открытие combobox - это не событие?)
Удалив один обработчик событий за один раз, я узнал, что событие MouseMove проблема, код выглядит следующим образом:
void DataGrid_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed) {
Console.Out.WriteLine("MouseButtonState.Pressed");
DataGrid dataGrid = sender as DataGrid;
prevRowIndex = GetDataGridItemCurrentRowIndex(dataGrid, e.GetPosition);
if (prevRowIndex < 0) { return;}
dataGrid.SelectedIndex = prevRowIndex;
DefaultValue selectedDV = dataGrid.Items[prevRowIndex] as DefaultValue;
if (selectedDV == null) { return; }
DragDropEffects dragDropEffects = DragDropEffects.Move;
if (DragDrop.DoDragDrop(dataGrid, selectedDV, dragDropEffects) != DragDropEffects.None)
{
dataGrid.SelectedItem = selectedDV;
}
}
}
Я не совсем понимаю, почему это происходит, потому что я на самом деле не перемещаете мышь, я просто нажмите на ячейку, содержащую комбо коробка. Как-то возможно иметь оба, Drag & Drop и ComboBoxes?
EDIT: Я изменил проект от the tutorial Я использовал, чтобы показать проблему у меня есть: Download from my dropbox Я изменил столбец Зарплатный быть выпадающим (и, конечно, также добавил группирование, потому что я думаю, что это может быть важно)
Было бы неплохо, если бы вы могли опубликовать минималистский проект, показывающий проблему, в противном случае потребуется много времени, чтобы пройти через все учебные пособия, которые вы сделали, чтобы воспроизвести вашу ошибку. – netaholic
Хорошо, я сделаю это, но мне потребуется некоторое время (я не могу загрузить полный проект, потому что это мой собственный код). –
Итак, как дела? – netaholic