Tag: WPF/DataGrid/Tips
<ResourceDictionary x:Class="ControlDemo.DataGridDemo.SingleClick.DataGridStyles" x:ClassModifier="public" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Style TargetType="DataGrid"> <!-- Your DataGrid style definition goes here --> <Setter Property="CellStyle"> <Setter.Value> <Style TargetType="DataGridCell"> <EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown"/> </Style> </Setter.Value> </Setter> </Style> </ResourceDictionary>
namespace ControlDemo.DataGridDemo.SingleClick { partial class DataGridStyles : ResourceDictionary { // // 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; } } }
public class CustomDataGridTemplateColumn :DataGridTemplateColumn { protected override object PrepareCellForEdit(FrameworkElement editingElement, RoutedEventArgs editingEventArgs) { editingElement.MoveFocus(new TraversalRequest(FocusNavigationDirection.First)); return base.PrepareCellForEdit(editingElement, editingEventArgs); } }