public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var gridLength = GridLengthUtils.ConvertToGridLength(value?.ToString());

            return(gridLength.IsAbsolute || gridLength.IsAuto);
        }
Ejemplo n.º 2
0
        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()));
 }
Ejemplo n.º 4
0
 public ColumnWidthAttribute(string width)
 {
     Width = GridLengthUtils.ConvertToDataGridLength(width);
 }