public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var gridLength = GridLengthUtils.ConvertToGridLength(value?.ToString()); return(gridLength.IsAbsolute || gridLength.IsAuto); }
private static void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { var dataGrid = sender as DataGrid; #region Get User Custom DataGridColumnAttribute var visibility = e.Column.Visibility; var width = dataGrid.ColumnWidth; var header = e.Column.Header; var readOnly = e.Column.IsReadOnly; var bindingMode = e.Column.IsReadOnly ? BindingMode.OneWay : BindingMode.TwoWay; var updateSourceTrigger = UpdateSourceTrigger.PropertyChanged; var descriptor = e.PropertyDescriptor as PropertyDescriptor; foreach (Attribute attribute in descriptor.Attributes) { if (attribute is DataGridColumnAttribute) { var dgcAttribute = attribute as DataGridColumnAttribute; if (dgcAttribute.ReadOnly) { readOnly = true; } if (dgcAttribute.Ignore) { visibility = Visibility.Collapsed; } if (!string.IsNullOrEmpty(dgcAttribute.ColumnWidth)) { width = GridLengthUtils.ConvertToDataGridLength(dgcAttribute.ColumnWidth); } if (dgcAttribute.BindingMode != null) { bindingMode = (BindingMode)dgcAttribute.BindingMode; } if (dgcAttribute.UpdateSourceTrigger != null) { updateSourceTrigger = (UpdateSourceTrigger)dgcAttribute.UpdateSourceTrigger; } } if (attribute is DisplayNameAttribute) { header = (attribute as DisplayNameAttribute).DisplayName; } } #endregion if (e.PropertyType.IsEnum) { var newColumn = new DataGridComboBoxColumn() { Width = width, Header = header, IsReadOnly = readOnly, Visibility = visibility, }; newColumn.ItemsSource = Enum.GetValues(e.PropertyType).Cast <Enum>(); newColumn.SelectedItemBinding = new Binding(e.PropertyName) { Mode = bindingMode, UpdateSourceTrigger = updateSourceTrigger }; newColumn.EditingElementStyle = new Style(typeof(ComboBox)) { BasedOn = (Style)dataGrid.FindResource(typeof(ComboBox)) }; newColumn.EditingElementStyle.Setters.Add(new Setter(ComboBox.HeightProperty, 30.0)); newColumn.EditingElementStyle.Setters.Add(new Setter(ComboBox.PaddingProperty, new Thickness(5, 0, 20, 0))); e.Column = newColumn; } else if (e.PropertyType == typeof(bool)) { var newColumn = new DataGridCheckBoxColumn() { Width = width, Header = header, IsReadOnly = readOnly, Visibility = visibility, }; newColumn.Binding = new Binding(e.PropertyName) { Mode = bindingMode, UpdateSourceTrigger = updateSourceTrigger }; newColumn.ElementStyle = new Style(typeof(CheckBox)) { BasedOn = (Style)dataGrid.FindResource(typeof(CheckBox)) }; newColumn.ElementStyle.Setters.Add(new Setter(CheckBox.BorderThicknessProperty, new Thickness(1))); newColumn.ElementStyle.Setters.Add(new Setter(CheckBox.BackgroundProperty, Colors.Transparent.ToBrush())); newColumn.ElementStyle.Setters.Add(new Setter(CheckBoxHelper.GlyphBrushProperty, Colors.Transparent.ToBrush())); newColumn.EditingElementStyle = new Style(typeof(CheckBox)) { BasedOn = (Style)dataGrid.FindResource(typeof(CheckBox)) }; newColumn.EditingElementStyle.Setters.Add(new Setter(CheckBox.BorderThicknessProperty, new Thickness(1))); newColumn.EditingElementStyle.Setters.Add(new Setter(CheckBox.BackgroundProperty, Colors.Transparent.ToBrush())); newColumn.EditingElementStyle.Setters.Add(new Setter(CheckBoxHelper.GlyphBrushProperty, Colors.Transparent.ToBrush())); if (dataGrid.IsReadOnly) { newColumn.ElementStyle.Setters.Add(new Setter(CheckBox.IsEnabledProperty, false)); newColumn.ElementStyle.Setters.Add(new Setter(CheckBox.OpacityProperty, 1.0)); } newColumn.CellStyle = new Style(typeof(DataGridCell)) { BasedOn = (Style)dataGrid.FindResource(typeof(DataGridCell)), }; e.Column = newColumn; } else { var newColumn = new DataGridTextColumn() { Width = width, Header = header, IsReadOnly = readOnly, Visibility = visibility, }; newColumn.Binding = new Binding(e.PropertyName) { Mode = bindingMode, UpdateSourceTrigger = updateSourceTrigger }; newColumn.ElementStyle = new Style(typeof(TextBlock)) { BasedOn = (Style)dataGrid.FindResource(typeof(TextBlock)) }; newColumn.ElementStyle.Setters.Add(new Setter(TextBox.MaxHeightProperty, 100.0)); newColumn.EditingElementStyle = new Style(typeof(TextBox)) { BasedOn = (Style)dataGrid.FindResource(typeof(TextBox)) }; newColumn.EditingElementStyle.Setters.Add(new Setter(TextBox.MaxHeightProperty, 100.0)); newColumn.EditingElementStyle.Setters.Add(new Setter(TextBox.VerticalScrollBarVisibilityProperty, ScrollBarVisibility.Auto)); newColumn.EditingElementStyle.Setters.Add(new Setter(TextBox.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Auto)); newColumn.EditingElementStyle.Setters.Add(new Setter(TextBox.MarginProperty, new Thickness(2))); newColumn.EditingElementStyle.Setters.Add(new Setter(TextBoxHelper.FocusedShadowColorProperty, Colors.Transparent)); newColumn.CellStyle = new Style(typeof(DataGridCell)) { BasedOn = (Style)dataGrid.FindResource(typeof(DataGridCell)), }; newColumn.CellStyle.Setters.Add(new Setter(DataGridCell.PaddingProperty, new Thickness(0, 0, 10, 0))); e.Column = newColumn; } }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return(GridLengthUtils.ConvertToGridLength(value?.ToString())); }
public ColumnWidthAttribute(string width) { Width = GridLengthUtils.ConvertToDataGridLength(width); }