我跟着this tutorial來實現Drag & Drop在我的數據網格上。我根據this link更改了它,以便能夠在組之間移動元素。MouseMove事件可以防止ComboBox被「打開」
我的datagrid包含一個按鈕的列,所以我跟着this answer使按鈕再次可用。我也有3列與組合框,他們不能使用(你可以點擊它們,然後他們看起來像組合框,但第二次點擊不會擴大它)。
其中兩個定義爲DataGridComboBoxColumn
,一個定義爲DataGridTemplateColumn
和ComboBox
在標籤DataGridTemplateColumn.CellEditingTemplate
中。
前兩個是這樣的:
<DataGridComboBoxColumn Header="Entity"
ItemsSource="{StaticResource tl}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValueBinding="{Binding Entity}"
x:Name="cmbEntity"></DataGridComboBoxColumn>
數據網格的定義是這樣的:
<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
,但它沒有幫助(並且它可能無用,因爲打開組合框不是事件?)
通過一次刪除一個事件處理程序,我發現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;
}
}
}
我不完全理解爲什麼發生這種情況,因爲我真的不移動鼠標,我只要按一下含有組合的細胞框。是否有可能同時擁有,拖動&拖放和ComboBoxes?
編輯:我修改從the tutorial我用於顯示我有問題的項目:Download from my dropbox 我改變了薪酬列是一個組合框(當然也添加了分組,因爲我認爲這可能是重要的)
如果你可以發佈一個簡單的項目來顯示這個問題,那很好,否則你需要花費所有的教程來重現你的錯誤。 – netaholic
好吧,我會這樣做,但這需要我一些時間(我無法上傳完整的項目,因爲它記錄了我自己的代碼)。 –
那麼,它怎麼樣? – netaholic