Как выборочно отключить редактирование в DataGrid?
По умолчанию редактирование активируется F2, двойным щелчком мыши и вводом в выделенную ячейку. Как я могу включить / отключить эти (некоторые из них) триггеры редактирования?
2 ответа:
datagrid.KeyDown += new KeyEventHandler(datagrid_KeyDown); void datagrid_KeyDown(object sender, KeyEventArgs e) { //obviously you'll have to add some code here //if(!datagridIsInEditMode) then if (Keyboard.IsKeyDown(Key.F2)) datagrid.BeginEdit(); else e.Handled = true; }
Я думаю, что самый чистый способ-оставить поведение datagrid в покое, оно знает, что делает,и создать свой собственный контроль в шаблоне edting. Давайте назовем его (для справки) CustomTextBox. Пусть этот CustomTextBox делает то, что вам нравится, например, отвечает только на клавишу F2 и т. д. Таким образом, вы не создаете странные поведения в datagrid и не инкапсулируете пользовательские поведения в свой пользовательский элемент управления.
<DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock DataContext="{Binding SomeProperty}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <yourNamespace:CustomTextBox DataContext="{Binding SomeProperty}" /> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn>