internal void UpdateGridRowColumn() { var attr = Object == null ? new GridDescriptorAttribute() : Object.GetType().GetAttribute <GridDescriptorAttribute>(); if (attr == null) { attr = new GridDescriptorAttribute(); } int column = attr.Column; int row = (_properties.Count - 1) / column + 1; GridColumnCount = column; GridRowCount = row; for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { var index = i * column + j; if (index >= _properties.Count) { continue; } var prop = _properties[index]; var pda = prop.PropertyInfo.GetAttribute <PropertyDescriptorAttribute>(); if (pda == null) { pda = new PropertyDescriptorAttribute(); } Grid.SetRow(prop.Designer, i); Grid.SetColumn(prop.Designer, j * 2); Grid.SetColumnSpan(prop.Designer, pda.ColumnSpan * 2 - 1); if (pda.Height > 0) { (prop.Designer as FrameworkElement).Height = pda.Height; } } } }
private PropertyGridCatalogMetadata GetPropertyContainer(PropertyDescriptorAttribute attr) { if (!tabs.ContainsKey(attr.Gallery)) { var content = new PropertyGridTabItemContent() { PropertyGrid = pg }; var item = new ListTabItem() { Name = attr.Gallery.Replace(' ', '_'), Header = new TextBox() { Text = attr.Gallery, ToolTip = attr.Gallery, }, Content = content, }; tabs[attr.Gallery] = content; pg.tabControl.Items.Add(item); } var tab = tabs[attr.Gallery]; if (!tab.Catalogs.Any(c => c.Name == attr.Catalog)) { tab.Catalogs.Add(new PropertyGridCatalogMetadata() { Name = attr.Catalog, Image = attr.CatalogImage16.IsNullOrBlank() ? null : BitmapFrame.Create(new Uri(attr.CatalogImage16)), PropertyGrid = pg, }); } return(tab.Catalogs.FirstOrDefault(c => c.Name == attr.Catalog)); }
internal void UpdateGridRowColumn(int cntCol) { DisplayItems.Clear(); if (PropertyGrid.ContainerType == ePropertyGridContainerType.Details || PropertyGrid.ContainerType == ePropertyGridContainerType.DetailsWithoutScrollViewer) { int row = 0; int col = 0; for (int i = 0; i < Properties.Count; i++) { var prop = Properties[i]; var pda = prop.PropertyInfo.GetAttribute <PropertyDescriptorAttribute>(); if (pda == null) { pda = new PropertyDescriptorAttribute(); } if (col >= cntCol) { row++; col = 0; } Grid.SetRow(prop.Designer, row * 2); Grid.SetColumn(prop.Designer, col * 2); var colSpan = pda.ColumnSpan; Grid.SetColumnSpan(prop.Designer, colSpan * 2 - 1); col += colSpan; if (pda.Height > 0) { (prop.Designer as FrameworkElement).Height = pda.Height; } } GridColumnCount = cntCol; GridRowCount = row + 1; foreach (var item in Properties) { DisplayItems.Add(item); } for (int i = 0; i < row; i++) { var separator = new SeparatorH(); separator.Margin = new Thickness(0); Grid.SetRow(separator, i * 2 + 1); Grid.SetColumnSpan(separator, cntCol * 2 - 1); DisplayItems.Add(new PropertyGridSeparatorItem { Designer = separator }); } } else { int row = 0; int col = 0; for (int i = 0; i < Properties.Count; i++) { var prop = Properties[i]; var pda = prop.PropertyInfo.GetAttribute <PropertyDescriptorAttribute>(); if (pda == null) { pda = new PropertyDescriptorAttribute(); } if (col >= cntCol) { row++; col = 0; } Grid.SetRow(prop.Designer, row); Grid.SetColumn(prop.Designer, col * 2); var colSpan = pda.ColumnSpan; Grid.SetColumnSpan(prop.Designer, colSpan * 2 - 1); col += colSpan; if (pda.Height > 0) { (prop.Designer as FrameworkElement).Height = pda.Height; } } GridColumnCount = cntCol; GridRowCount = row + 1; } }
private void OnCompletedGrouping(List <PropertyDescriptor> metas) { metas.ForEach(c => { var info = c.Object.GetType().GetProperty(c.Name); var attr = info.GetAttribute <PropertyDescriptorAttribute>(); if (attr == null) { attr = new PropertyDescriptorAttribute(); } if (attr.Gallery.IsNullOrBlank()) { attr.Gallery = "默认"; } var container = GetPropertyContainer(attr); if (c.BindingExpression != null && pg.IsGroupingEnabled && pg.Editable) { tabs[attr.Gallery].BindingGroup.BindingExpressions.Add(c.BindingExpression); } container.Properties.Add(c); }); if (pg.ContainerType == ePropertyGridContainerType.Grid || pg.ContainerType == ePropertyGridContainerType.Form || pg.ContainerType == ePropertyGridContainerType.FormWithoutScrollViewer || pg.ContainerType == ePropertyGridContainerType.Details || pg.ContainerType == ePropertyGridContainerType.DetailsWithoutScrollViewer) { var attr = lastObjectType == null ? new GridDescriptorAttribute() : lastObjectType.GetAttribute <GridDescriptorAttribute>(); if (attr == null) { attr = new GridDescriptorAttribute(); } foreach (var tab in tabs) { tab.Value.ContainerType = pg.ContainerType; foreach (var cata in tab.Value.Catalogs) { cata.GridColumnSpacing = pg.GridColumnSpacing; cata.UpdateGridRowColumn(attr.Column); } } } pg.tabControl.HeaderVisibility = tabs.Count > 1 ? Visibility.Visible : Visibility.Collapsed; if (pg.tabControl.HeaderVisibility != Visibility.Visible) { pg.tabControl.BorderThickness = new Thickness(0); } else if (pg.tabControl.Direction == eDirection.Top) { pg.tabControl.BorderThickness = new Thickness(0, 1, 0, 0); } else if (pg.tabControl.Direction == eDirection.Left) { pg.tabControl.BorderThickness = new Thickness(1, 0, 0, 0); } else if (pg.tabControl.Direction == eDirection.Right) { pg.tabControl.BorderThickness = new Thickness(0, 0, 1, 0); } else if (pg.tabControl.Direction == eDirection.Bottom) { pg.tabControl.BorderThickness = new Thickness(0, 0, 0, 1); } var contentMargin = pg.tabControl.HeaderVisibility == Visibility.Visible ? new Thickness(0, 5, 0, 5) : new Thickness(0); foreach (var tab in tabs) { tab.Value.Margin = contentMargin; tab.Value.Catalogs[0].HeaderVisibility = tab.Value.Catalogs.Count > 1 ? Visibility.Visible : Visibility.Collapsed; tab.Value.InstallSelectedIndexSyncHandler(); } pg.tabControl.SelectedIndex = -1; pg.tabControl.SelectedIndex = 0; }