template style personalizar ejemplo custom columns wpf datagrid templating

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.



aquí hay un excelente artículo

Para aplicar la edición de un solo clic a todas las celdas de DataGrid

  1. Pegue el estilo a continuación en los recursos de su DataGrid
  2. 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

  1. Establecer una x: clave en el estilo (por ejemplo)
  2. Pegue el estilo en los recursos de su DataGrid
  3. 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)
  4. 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; }