style - Plantilla de conmutador WPF DataGrid entre el modo de visualización y el modo de edición
wpf datagrid custom row template (3)
La propiedad ContentTemplateSelector debería permitirle seleccionar una plantilla u otra dependiendo del modo actual (ver / editar)
Si tiene un WGD DataGrid
a la izquierda de una ventana con un área a la derecha para mostrar el registro seleccionado. El registro seleccionado consiste en Textbox
es y ComboBox
es que están deshabilitados hasta que se haga clic en el botón editar. Todo funciona como se espera
Sin embargo, parece un poco torpe estar ComboBox
es cuando se está cambiando el SelectedItem
del DataGrid
. Se podría usar un control mucho más ligero, como un TextBlock
hasta que se haga clic en el botón Editar, y luego se podría desactivar el TextBlock
s para ComboBox
.
Estoy seguro de que esto se puede hacer con algún tipo de creación de plantillas, pero cuando traté de experimentar con esto, todos los eventos que están asociados con los ComboBox
reportan un error ya que ya no están presentes ya que se han reemplazado con TextBlocks en "Modo de visualización".
Probablemente estoy haciendo esto mal así que se apreciará alguna guía.
El enlace de respuesta marcado está muerto.
En su lugar, esto puede ayudar: http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing
aquí hay un excelente artículo
Para aplicar la edición de un solo clic a todas las celdas de DataGrid
- Pegue el estilo a continuación en los recursos de su DataGrid
- Pega el método en el código detrás
Para aplicar la edición con un solo clic a solo ciertas celdas en DataGrid
- Establecer una x: clave en el estilo (por ejemplo)
- Pegue el estilo en los recursos de su DataGrid
- Aplicar el estilo a la propiedad CellStyle de las columnas en las que le gustaría tener la edición de un solo clic (por ejemplo)
Pega el método en el código detrás
// // SINGLE CLICK EDITING // private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { DataGridCell cell = sender as DataGridCell; if (cell != null && !cell.IsEditing && !cell.IsReadOnly) { if (!cell.IsFocused) { cell.Focus(); } DataGrid dataGrid = FindVisualParent<DataGrid>(cell); if (dataGrid != null) { if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow) { if (!cell.IsSelected) cell.IsSelected = true; } else { DataGridRow row = FindVisualParent<DataGridRow>(cell); if (row != null && !row.IsSelected) { row.IsSelected = true; } } } } } static T FindVisualParent<T>(UIElement element) where T : UIElement { UIElement parent = element; while (parent != null) { T correctlyTyped = parent as T; if (correctlyTyped != null) { return correctlyTyped; } parent = VisualTreeHelper.GetParent(parent) as UIElement; } return null; }