Converting to v17.1
The 17.1 version has new lightweight implementations of the Editors and PropertyGrid controls created that are much more performant, use less memory, and still provide a wide array of features. These infrastructure changes did require some breaking changes and some API cleanup was performed at the same time. All of the breaking changes are detailed in the linked topics below.
Note
Please read through the Licensing topic's section on licenses.licx files. In the 17.1 version we improved the licenses.licx file licensing mechanism to only use a single entry that covers all Actipro products you've licensed. Now a single new entry is used, and all older Actipro entries should be removed.
Massive Updates to Editors
The old versions of the edit boxes in Editors, while providing many features, were very complex and used many UI elements to support their functionality. This meant that windows with a lot of editors (such as when used in property grids or grids) could be very memory intensive and take a while to load.
For the 17.1 version, we reimplemented them with a design that is code-compatible with the Universal Windows variations of Editors. These new edit boxes are now lightweight controls that harness a native TextBox control in their templates. They use far fewer elements and bindings than before and load very quickly. New edit boxes, pickers, and other miscellaneous controls have been added as well.
While we fully encourage you to upgrade your existing applications that use the older Editors product to the new version so that you can continue to receive the latest feature additions and bug fixes, we are also shipping a legacy version of the old assembly that can temporarily be used in the interim for full backward compatibility.
Note
The new Editors contains most, but not all of the features in the old version, along with many new features. If the new version is missing a feature area that you need that was in the old version, please write our support team and we can work with you to determine if it's feasible to add back in.
General PartEditBox and Part Updates
The part edit box infrastructure was completely rewritten in the 17.1 version to use a native TextBox control in templates and to be lighter weight in terms of elements. Most of the features of the old edit boxes are still available in the new version, along with many new ones, but some lesser-used features were removed in scenarios where they didn't add much value and would have introduced extensive complexity to the controls. A benefit of using TextBox as the primary input method is that now features like IME input and rich UIA are fully supported.
The old version's part edit boxes had a three tier infrastructure: edit box, part groups, and parts. Now part edit boxes have two-tiers: edit box and parts.
Edit boxes no longer work like an items control in terms of how UI is constructed (there are no more placement slots). Some edit boxes have templates that contain preview swatches (like for Brush or Color display) that are left-aligned. All edit boxes have a TextBox that allows text entry of a string representation of the object being edited. Many edit boxes have an optional drop-down button that shows if the HasPopup property is true. The template of each edit box can be customized if additional buttons or UI needs to be added.
In an effort to simplify the object model, part groups no longer exist in the new version.
ArePartGroupsDisabledWhenUnchecked,ArePartGroupsSelectable, andDefaultPartGroupVisibilityproperties removed.Since a simpler
TextBoxis used for input, several properties no longer apply.BackgroundEditable,BackgroundNonEditable,ForegroundEditable, andForegroundNonEditableproperties removed.Similarly,
CenterSlotHorizontalAlignment,CenterSlotMargin,LeftSlotMargin, andRightSlotMarginproperties removed. If you need to alter the alignment of the text in theTextBox, use theTextAlignmentproperty instead.Nullable edit boxes no longer have a checkbox. Instead, select all the text and delete it to null out a nullable edit box.
IsChecked,CheckBoxInactiveVisibility,CheckBoxMargin,CheckBoxPlacementOrder,CheckBoxPlacementSlot,CheckBoxTemplate, andCheckBoxVisibilityproperties removed.The
InitialValueproperty was removed since the former checkbox used to initialize it. However, numerous edit boxes have a newDefaultValueproperty that is similar and is used as the value to set when incrementing/decrementing (via spinner or arrow keys) from anullvalue.The drop-down button is now defined in each edit box control's template so placement properties no longer apply.
DropDownButtonInactiveVisibility,DropDownButtonMargin,DropDownButtonPlacementOrder,DropDownButtonPlacementSlotSpinnerTemplate,DropDownButtonTemplate,DropDownHorizontalAlignment, andDropDownStaysOpenproperties removed.DropDownButtonVisibilityproperty removed. Use HasPopup property instead.DropDownClosedandDropDownOpenedevents removed.DropDownContent,DropDownContentTemplate, andDropDownContentTemplateSelectorproperties removed. Each edit box now has a related picker (i.e., DatePicker for DateEditBox) and its style can be set via PopupPickerStyle. ThisStylevalue can set a newTemplatefor the picker if needed.Focus(overload) andSelectFirstGroupmethods removed. Use the normal Focus method instead.Hint,HintTemplate,HintTemplateSelector,IsHintTransitioningEnabled, andIsHintVisibleproperties removed. Use PlaceholderText property instead.IsDropDownButtonTransparencyModeEnabledproperty removed. Use UsageContext property instead.IsDropDownOpenproperty removed. Use IsPopupOpen property instead.IsFocusMovedOnTerminalMatchesproperty removed.MaxDropDownHeight,MaxDropDownWidth,MinDropDownHeight, andMinDropDownWidthproperties removed.PartValueCancelTriggersproperty andPartValueCancelTriggerstype removed.PartValueCommitTriggersproperty renamed toCommitTriggers, andPartValueCommitTriggerstype renamed toPartEditBoxCommitTriggers.PromptIndicatorVisibilityproperty removed.SelectFirstGroupmethod removed.SelectAllmethod can be used instead.SpinBehaviorproperty renamed to SpinWrapping and relatedSpinBehaviorenum renamed toSpinWrapping.SpinnerInactiveVisibilityproperty removed andSpinnerVisibilityproperty return value changed to cover both former properties. Use the revised SpinnerVisibility property instead.Spinner is now defined in each edit box control's template so placement properties no longer apply.
SpinnerMargin,SpinnerPlacementOrder,SpinnerPlacementSlot, andSpinnerTemplateproperties removed.
In addition to the above, some number-oriented edit boxs have had these property changes:
StepValueproperty renamed to SmallChange, which is used with arrow key, mouse wheel, spinner, and slider incrementing. A new LargeChange property is used for PgUp/PgDn incrementing. Number-oriented structure edit boxes like ThicknessEditBox now use the sameTypefor the change property values, so that different increments can be given for the different parts.Minimum and Maximum now use non-nullable types instead of the same type as the
Valueproperty. So for a DoubleEditBox (which has aValueof typeNullable<Double>), the type for those two properties will beDouble.AllowInfinityandAllowNaNproperties are now available only on DoubleEditBox and SingleEditBox as IsPositiveInfinityAllowed, IsNegativeInfinityAllowed, and IsNaNAllowed properties.
PropertyGrid Integration Updates
The new ActiproSoftware.Editors.Interop.Grids.Wpf.dll assembly provides integration of edit boxes with the PropertyGrid control. found in the Grids product via the use of custom property editors. This feature is similar to what was in the old ActiproSoftware.Editors.Interop.PropertyGrid.Wpf.dll assembly. Several of the property editor classes (like BrushPropertyEditor, etc.) have had property updates to correspond to the related edit box property changes (adds, renames, or removes) described in this topic. Also the MaskedTextBoxPropertyEditor class is now named MaskedStringPropertyEditor.
The Editors and PropertyGrid Interoperability topic covers the property editors that are available, including additional ones like DatePropertyEditor, to integrate edit boxes with PropertyGrid and how to do so in the new version.
DataGrid Integration Updates
The new ActiproSoftware.Editors.Interop.DataGrid.Wpf.dll assembly provides easy integration of edit boxes with the native WPF DataGrid control. Several of the column classes (like DataGridBrushColumn, etc.) have had property updates to correspond to the related edit box property changes (adds, renames, or removes) described in this topic. Also the DataGridMaskedTextColumn class is now named DataGridMaskedStringColumn.
The Editors and DataGrid Interoperability topic covers the column classes that are available, including additional ones like DataGridDateColumn, to integrate edit boxes with DataGrid.
Ribbon Integration Updates
The old ActiproSoftware.Editors.Interop.Ribbon.Wpf.dll assembly, which provided Ribbon control-like appearance for edit boxes via a RibbonEditorsStyleBehavior class is no longer used in the new version. Instead the new edit box templates include a built-in special mode that can be activated for toolbar/Ribbon contextual usage.
The Editors and Ribbon Interoperability topic covers the properties that should be set on edit boxes to achieve a Ribbon control-like appearance, and to also optionally support labels.
AnalogClock Changed to TimePicker
The AnalogClock control has been removed. Use the new TimePicker control instead.
BrushEditBox Updates
AllowGradientBrushesproperty renamed to IsGradientAllowed.BrushEditorStyleproperty renamed to PopupPickerStyle.BrushPreviewInactiveVisibilityproperty removed and swatch is always visible now.BrushPreviewMarginproperty renamed to SwatchMargin.BrushPreviewPlacementOrderproperty removed.BrushPreviewPlacementSlotproperty removed.BrushPreviewTemplateproperty removed.BrushPreviewVisibilityproperty renamed to HasSwatch.IsAlphaComponentEditableproperty removed.IsAlphaComponentVisibleproperty renamed to IsAlphaEnabled.
BrushEditor Changed to BrushPicker
The BrushEditor and BrushPreviewControl controls have been removed. Use the new BrushPicker control instead.
Calculator Updates
DisplayModeproperty removed in favor of new HasDisplay and HasMemoryButtons properties.DisplayStringproperty renamed to DisplayText.CalculatorCommandsclass removed in favor of new command properties directly on Calculator.
ColorEditBox Updates
ColorEditorStyleproperty renamed to PopupPickerStyle.ColorPreviewInactiveVisibilityproperty removed and swatch is always visible now.ColorPreviewMarginproperty renamed to SwatchMargin.ColorPreviewPlacementOrderproperty removed.ColorPreviewPlacementSlotproperty removed.ColorPreviewTemplateproperty removed.ColorPreviewVisibilityproperty renamed to HasSwatch.EditablePartsproperty and relatedColorEditablePartsenumeration removed.ExportFormatproperty removed.Formatproperty removed.IsAlphaComponentVisibleproperty renamed to IsAlphaEnabled.
ColorEditor Changed to ColorPicker
The ColorEditor control has been removed. Use the new ColorPicker control instead.
CornerRadiusEditBox Updates
EditablePartsproperty and relatedCornerRadiusEditablePartsenumeration removed.
DateTimeEditBox Updates
AnalogClockStyleandMonthCalendarStyleproperties removed. Use PopupPickerStyle with a DateTimePicker style instead.DateValueproperty removed. Use the new DateEditBox control when doing date-only selection.DefaultDropdownContentTypeproperty removed since there are separate DateTimeEditBox, DateEditBox, and TimeEditBox controls now.EditablePartsproperty and relatedDateTimeEditablePartsenumeration removed.ExportFormatproperty removed.
DateTimeEditor Changed to DateTimePicker
The DateTimeEditor control has been removed. Use the new DateTimePicker control instead.
EnumEditBox Updates
EnumListBoxStyleproperty renamed to PopupPickerStyle.UseDescriptionAttributesproperty renamed to UseDisplayAttributes. BothDescriptionAttributeandDisplayAttributeare now supported.
EnumListBox Updates
DisplayModeproperty and relatedEnumListBoxDisplayModeenumeration removed.IsItemsSourceAutoUpdatedproperty removed.EnumListBoxStyleproperty renamed to PopupPickerStyle.UseDescriptionAttributesproperty renamed to UseDisplayAttributes. BothDescriptionAttributeandDisplayAttributeare now supported.
EnumListBoxItem Updates
DisplayModeproperty removed.UseDescriptionAttributesproperty removed.
GuidEditBox Updates
NewGuidButtonInactiveVisibilityproperty removed and swatch is always visible now.NewGuidButtonMarginproperty removed.NewGuidButtonPlacementOrderproperty removed.NewGuidButtonPlacementSlotproperty removed.NewGuidButtonTemplateproperty removed.NewGuidButtonVisibilityproperty removed. Set IsReadOnly totrueto hide the button.SetValueToNewGuidproperty renamed to NewGuidCommand.
Int32RectEditBox Updates
EditablePartsproperty and relatedRectEditablePartsenumeration removed.
MaskedTextBox Updates
MaskedTextBoxchanged to inherit the nativeTextBoxcontrol.IsMatchedChangedevent changed to be anEventHandler.IsMatchedTerminallyproperty andIsMatchedTerminallyChangedevent removedMaskTypeproperty renamed to MaskKind, and relatedMaskTypeenumeration renamed to MaskKind.PromptBrush,PromptGeometry, andPromptIndicatorTypeproperties removed since MaskedTextBox now inherits the nativeTextBoxinstead of rendering prompt glyphs itself.TextChangedandTextChangingevents changed to use the nativeTextBoxversions, sinceMaskedTextBoxhow inheritsTextBox.
MonthCalendar Updates
ActiveViewModeandMaxViewModeproperties changed to returnMonthCalendarViewMode, renamed fromCalendarViewMode.AreTransitionAnimationsEnabledproperty removed and animations always occur.BeginUpdate/EndUpdatemethods removed.ClearButtonContentproperty changed to a string and renamed toClearButtonText.ClearButtonContentTemplateproperty removed. Use the newClearButtonStyleproperty instead.DayItemStyleandDayItemStyleSelectorproperties removed. Use the newDayItemTemplateproperty instead.DayOfWeekItemStyleandDayOfWeekItemStyleSelectorproperties removed. Use the newDayNameItemContainerStyleandDayNameItemTemplateproperties instead.DecadeItemStyleandDecadeItemStyleSelectorproperties removed. Use the newDecadeItemTemplateproperty instead.IsDayOfWeekHeaderVisibleproperty removed, and header will always be visible.MaxDateproperty renamed toMaximum.MinDateproperty renamed toMinimum.MonthItemStyleandMonthItemStyleSelectorproperties removed. Use the newMonthItemTemplateproperty instead.NextViewButtonStyleandPreviousViewButtonStyleproperties removed. Use the newNavigationButtonStyleproperty instead.Refreshmethod added a parameter.SelectedDatesproperty changed to use a newDateRangeCollectionimplemention in the Shared Library.SelectionChangedevent declaration changed.SelectionChangingevent removed.SelectionModeproperty changed to returnMonthCalendarSelectionMode, renamed fromCalendarSelectionMode.ViewResetModeproperty changed to returnMonthCalendarViewResetMode, renamed fromCalendarViewResetMode.WeekNumberItemStyleandWeekNumberItemStyleSelectorproperties removed. Use the newWeekNumberItemContainerStyleandWeekNumberItemTemplateproperties instead.YearItemStyleandYearItemStyleSelectorproperties removed. Use the newYearItemTemplateproperty instead.
PasswordBox Removed
Use the native PasswordBox control instead.
PointEditBox Updates
EditablePartsproperty and relatedPointEditablePartsenumeration removed.
Rating Updates
IsReadOnlyproperty removed. Set theIsEnabledproperty tofalseto simulate read-only mode.
RatingItem Updates
HoverGlyphTemplate,SelectedAlternateBackgroundGlyphTemplate, andSelectedAlternateForegroundGlyphTemplateproperties replaced by the ActiveGlyphTemplate and AverageGlyphTemplate properties.
RectEditBox Updates
EditablePartsproperty and relatedRectEditablePartsenumeration removed.
SizeEditBox Updates
EditablePartsproperty and relatedSizeEditablePartsenumeration removed.
Spinner Updates
CommandTargetproperty removed.DecrementValueproperty renamed to DecrementCommand.IncrementValueproperty renamed to IncrementCommand.
TextBox Removed
Use the native TextBox control instead.
ThicknessEditBox Updates
EditablePartsproperty and relatedThicknessEditablePartsenumeration removed.
TimeEditor Changed to TimePicker
The TimeEditor control has been removed. Use the new TimePicker control instead.
TimeSpanEditBox Updates
EditablePartsproperty and relatedTimeSpanEditablePartsenumeration removed.ExportFormatproperty removed.
VectorEditBox Updates
EditablePartsproperty and relatedVectorEditablePartsenumeration removed.
Temporary Inclusion of Older Editors and Interop Legacy Assemblies
We recognize that for the 17.1 version, numerous breaking changes were made and that you might not be able to immediately update to the newer logic. While we fully encourage you to do so since all future updates and maintenance will only be done on this newer Editors codebase, we still offer the older Editors version along with its related interop assemblies.
These older legacy assemblies are not installed by default. You must check the 'Control Assemblies / Legacy' option in the installer to install them. Once you do so, these Editors-related assemblies will appear in a 'Legacy' subfolder of the Actipro assembly install folder (see the Deployment topic for the default location), but will not appear in the GAC:
- ActiproSoftware.Editors.Legacy.Wpf.dll
- ActiproSoftware.Editors.Interop.DataGrid.Legacy.Wpf.dll
- ActiproSoftware.Editors.Interop.PropertyGrid.Legacy.Wpf.dll
- ActiproSoftware.Editors.Interop.Ribbon.Legacy.Wpf.dll
You will be able to reference the ActiproSoftware.Editors.Legacy.Wpf.dll assembly in place of the new ActiproSoftware.Editors.Wpf.dll assembly to maintain full backward compatibility with the old version, while you work on upgrading your application to the new version.
See the Licensing topic for info on how to add an entry to the licenses.licx file (updated info added in v17.1).
Do NOT reference both the ActiproSoftware.Editors.Wpf.dll and ActiproSoftware.Editors.Legacy.Wpf.dll assemblies (or similar for interop assemblies) in the same project, since they have many types/members named the same.
Again, these legacy assemblies will only be included temporarily. We encourage you to upgrade your code to the latest Editors assembly as soon as it is feasible so that you can continue to receive the latest product feature additions and bug fixes.
Massive Updates to PropertyGrid, Moved Into Grids Assembly
The old PropertyGrid control was very feature-rich and was very customizable. The downside of it was that it was relatively slow to load objects and didn't make the best use of virtualization.
For the 17.1 version, we are introducing a new Grids product that replaces the old PropertyGrid product. Customers who have active PropertyGrid license subscriptions will get Grids for free, and Grids is included in WPF Studio similar to how PropertyGrid was. Grids first started off with implementations of tree controls (TreeListBox and TreeListView) that were built from the ground up to render tree structures in a highly-performant way, making full use of virtualization. The new PropertyGrid extends these controls and loads large complex objects instantly, even in cases where the old PropertyGrid may have taken several seconds to load. The entire data model and data factory design has been rewritten to be simpler and easier than ever to customize, while retaining all of the abilities found in the old PropertyGrid. Integration with the new Editors controls continues to be fully supported.
While we fully encourage you to upgrade your existing applications that use the older PropertyGrid product to the new Grids version so that you can continue to receive the latest feature additions and bug fixes, we are also shipping a legacy version of the old assembly that can temporarily be used in the interim for full backward compatibility.
Control Infrastructure Redesigned
In the 17.1 version, the entire core infrastructure of the control hierarchy for property grid was redesigned. It now is based on our new tree controls (TreeListBox and TreeListView) and is much faster as a result.
The new tree controls allow custom columns to be inserted and the ability to resize columns can be disabled by setting the CanColumnsResize property (formerly named AreDefaultColumnsResizable) to false. See the Columns topic for details on columns, resizing, and creating custom columns.
SelectedObject(s) Properties Renamed to DataObject(s)
Since the new base tree controls have a number of "Select*" properties like SelectedItem that generally correspond to which "row" (PropertyGridItem) is selected, we renamed the former SelectedObject and SelectedObjects properties to DataObject and DataObjects respectively.
Data Accessors and Factories Redesigned
The former data accessors (now called data models) and data factories have been redesigned. The concepts behind them are similar to before but there are different class names used (all in the ActiproSoftware.Windows.Controls.Grids.PropertyData namespace) and some properties on the data models may be different to accommodate new features and general API cleanup. The Data Models and Factories topic digs into these areas in detail.
Interface and Class Mappings
While the data model API has been redesigned, many of the new interfaces and classes generally resemble the old ones. Data model types are now in the ActiproSoftware.Windows.Controls.Grids.PropertyData namespace. Here are some quick notes on conversion:
IDataAccessorinterface is nowIDataModel.DataAccessorBaseclass is nowDataModelBase.IPropertyDataAccessorinterface is nowIPropertyModel.PropertyDataAccessorBaseclass is nowPropertyModelBase.CachedPropertyDataAccessorBaseclass is nowCachedPropertyModelBase.PropertyDescriptorDataAccessorBaseandPropertyDescriptorDataAccessorclasses are nowPropertyDescriptorPropertyModel.CollectionPropertyDescriptorDataAccessorclass is nowCollectionPropertyDescriptorPropertyModel.MergedPropertyDataAccessorclass is nowMergedPropertyModel.ImmutablePropertyDescriptorDataAccessorclass is no longer needed.PropertyGridPropertyItem(a class you could use to directly define a property in XAML) is nowPropertyModel. Instances can be added to the PropertyGrid.Properties collection.ICategoryDataAccessorinterface is nowICategoryModel.CategoryDataAccessorclass is nowCategoryModel.PropertyGridCategoryItem(a class you could use to directly define a category in XAML) is removed. Instead, addPropertyModelinstances to the PropertyGrid.Properties collection and assign the proper category name to eachPropertyModel. The properties will be automatically categorized by the data factory.ICategoryEditorDataAccessorinterface is nowICategoryEditorModel.CategoryEditorDataAccessorclass is nowCategoryEditorModel.
PropertyGridDataAccessorItem Removed and Binding Changes
In the old version, each IPropertyDataAccessor you supplied to the property grid either via a data factory or directly as PropertyGridPropertyItem was "wrapped" by a PropertyGridDataAccessorItem. Bindings in name and value data templates used to need to have RelativeSource={RelativeSource AncestorType={x:Type propgridPrimitives:IPropertyDataAccessor}}, which would locate and return the wrapper PropertyGridDataAccessorItem. While the wrapper exposed most common properties to the data templates, if you needed direct access to the "wrapped" data accessor, you could look at the DataContext of the PropertyGridDataAccessorItem. Needless to say, this design was confusing and not performant due to all bindings needing to do ancestor searching.
The new data model API is much more straightforward, faster, and the idea of PropertyGridDataAccessorItem has been removed. Any IPropertyModel supplied to the property grid either via a data factory or directly via PropertyGrid.Properties is used as the data context for all name and value data templates. This means that all control bindings work directly off the source property model with no ancestor searching needed.
Data Accessor Properties
Some properties on the interfaces/classes mentioned above have been changed or renamed as well. While several notable model changes are described below, see the Data Models and Factories topic for details on how to use the new data model API.
Here are some quick notes on conversion:
CanResetproperty is nowCanResetValue.IsMergableproperty is nowIsMergeable.IsReadOnlyproperty is nowIsValueReadOnly.IsReadOnlyis still there, but is now a resolved value per below.- One
Refreshmethod overload removed. Resetmethod is nowResetValue.ValueNameproperty is nowName.
The property structure for property models to indicate read-only state has changed. In the old data accessors, there was an IsReadOnly property that returned whether the data accessor was read-only and then in the property editor value template, triggers examined that along with a lookup to the ancestor PropertyGrid to see if it was read-only. If either of those were true, setters would make the controls in the template read-only or disabled as appropriate. In the new property model API, the IPropertyModel.IsReadOnly property now returns a resolved result of whether the property is read-only, by looking at the IsHostReadOnly property (which comes from PropertyGrid.IsReadOnly) and the IsValueReadOnly property (which returns whether the property value itself is read-only. This is a nicer design since the one resolved IsReadOnly can be bound directly to controls in property editor value templates. Any logic that used to be in old data accessor's IsReadOnly property should be moved to determine the IsValueReadOnly property value now.
Data Factories
In regards to data factories, the abstract DataFactory class is now DataFactoryBase and the TypeDescriptorFactory class is still named TypeDescriptorFactory, but has an updated API. There is no need for TypeReflectionFactory any more, so it has been removed. Data factory types are now in the ActiproSoftware.Windows.Controls.Grids.PropertyData namespace.
Property Editors Changes
Property editors have been reworked to an extent. Instead of the old BuiltinEditors class that had resource key properties, there are now numerous properties on PropertyGrid like DefaultStringNameTemplate and DefaultStringValueTemplate that can be changed to customize the appearance of all built-in name/value editors.
The global BuiltinEditors.PropertyEditors collection is renamed to PropertyGrid.DefaultPropertyEditors. The PropertyEditorModifier class and its related actions have had some API changes to make them easier to use. The former PropertyEditorModifier concept is now implemented through the PropertyGridPropertyEditorsModifier class and its updated API explained in detail in the Property Editors topic.
In the past, a custom DataTemplate used for value editors would have to use FindAncestor bindings to bind to the value and other data model properties. The actual data context for the DataTemplate was the PropertyEditor object. In the new version, the data context for the DataTemplate is now the IPropertyModel, making it much easier to bind to any property on the data model. Additionally, the PropertyEditor used to display the DataTemplate, if any, is available via the IPropertyModel.ValuePropertyEditor property. Each DataTemplate is now much smaller and simpler, which helps improve property grid performance.
See the Property Editors topic for detailed information on how property editors work in the new version and how to completely customize them.
Integration with Editors Updated
The new ActiproSoftware.Editors.Interop.Grids.Wpf.dll assembly provides integration of edit boxes with the property grid via the use of custom property editors. This feature is similar to what was in the old ActiproSoftware.Editors.Interop.PropertyGrid.Wpf.dll assembly. Several of the property editor classes (like BrushPropertyEditor, etc.) have had property updates to correspond to the related edit box property changes (adds, renames, or removes). Also the MaskedTextBoxPropertyEditor class is now named MaskedStringPropertyEditor.
The Editors and PropertyGrid Interoperability topic covers the property editors that are available, including additional ones like DatePropertyEditor, to integrate edit boxes with PropertyGrid and how to do so in the new version.
Events Renamed
While we rebuilt the infrastructure, we took some time to clarify and rename events as well.
ItemContextMenuOpeningevent renamed to ItemMenuRequested and now uses TreeListBoxItemMenuEventArgs.PropertyChangedevent renamed to PropertyValueChanged and now uses PropertyModelValueChangeEventArgs.PropertyChangingevent renamed to PropertyValueChanging and now uses PropertyModelValueChangeEventArgs.PropertyChildAddedevent renamed to ChildPropertyAdded and now uses PropertyModelChildChangeEventArgs.PropertyChildAddingevent renamed to ChildPropertyAdding and now uses PropertyModelChildChangeEventArgs.PropertyChildRemovedevent renamed to ChildPropertyRemoved and now uses PropertyModelChildChangeEventArgs.PropertyChildRemovingevent renamed to ChildPropertyRemoving and now uses PropertyModelChildChangeEventArgs.SelectedObjectsChangedevent removed.
Modified Property Display Removed
In an effort to maximize performance and simplify the elements and logic in the name and value cell presenatation, we removed the extra logic needed to support modified property display. The related ModifiedPropertyDisplayMode property was removed. It is possible to add back in custom display by altering the property editor templates or even adding an additional column that shows modified states.
Sorting Changes
The way data models at each level are sorted has changed. The AreDefaultSortDescriptionsEnabled and SortDescriptions properties have been removed. Use the SortComparer property instead, which requires an instance of DataModelSortComparer or a derived class. The property can be set to null to disable default sorting.
Filtering Changes
The filtering model has been reworked to an extent and large portions of it moved to the Shared Library. in the ActiproSoftware.Windows.Data.Filtering namespace. The property grid-specific filters (e.g., PropertyModelStringFilter and PropertyModelBooleanFilter) are now in the ActiproSoftware.Windows.Controls.Grids.PropertyData namespace.
Summary Area Changes
The SummaryCanAutoSize property was renamed to CanSummaryAutoSize. The SummaryTransitionDuration and SummaryTransitionSelector properties were removed, since transitions are no longer used in the summary area in an effort to simply the default templates.
List Modifiers Removed
The list modifier features that were used in certain scenarios to help configure property editors in XAML have been removed. There is now a new mechanism for specifying the default property editors in XAML, as described in the Property Editors topic.
Other Changes
These other miscellaneous changes were made to the PropertyGrid class:
AreEmptyAccessorsFilteredproperty removed, as it is no longer needed.BeginUpdateandEndUpdateoptimization methods removed, since performance is very fast in the new version even without them.CollectionConverterproperty removed, which was used byCollectionPropertyDescriptorDataAccessor. The new virtual CollectionPropertyDescriptorPropertyModel.CreateExpandableCollectionConverter method now creates the ExpandableCollectionConverter to use.CollectionDisplayModeproperty renamed to CollectionPropertyDisplayMode and relatedPropertyGridCollectionDisplayModeenum renamed to CollectionPropertyDisplayMode.CommitPendingChangesmethod renamed to TryCommitPropertyValueEdit.EscapeKeyDownDelegatesproperty renamed to CancelPropertyValueEditHandlers and the dictionary values are now of type PropertyGridItemActionHandler.TextInputFocusDelegatesproperty renamed to StartPropertyValueEditHandlers and the dictionary values are now of type PropertyGridItemActionHandler.Hint,HintTemplate, andHintTemplateSelectorproperties removed. Use the new EmptyContent and EmptyContentTemplate properties instead.IsAsynchronousandIsItemsSourceAutoUpdatedproperties removed since they are no longer needed due to performance improvements.- The
NameCellContainerStyle,NameTemplateSelector,ValueCellContainerStyle, andValueTemplateSelectorproperties have been replaced by a new infrastructure. See the Property Editors topic for an explanation of how things work in the new version. - The static
ShowPropertyDialogCommandproperty has been removed, which helped support dialog display buttons. This feature is still present but in an improved design. See the "Property Dialogs" section in the Property Editors topic for more information on how to implement property dialogs.
Temporary Inclusion of Older PropertyGrid and Interop Legacy Assemblies
We recognize that for the 17.1 version, numerous breaking changes were made and that you might not be able to immediately update to the newer logic. While we fully encourage you to do so since all future updates and maintenance will only be done on this newer Grids codebase, we still offer the older PropertyGrid version along with its related interop assemblies.
These older legacy assemblies are not installed by default. You must check the 'Control Assemblies / Legacy' option in the installer to install them. Once you do so, these PropertyGrid-related assemblies will appear in a 'Legacy' subfolder of the Actipro assembly install folder (see the Deployment topic for the default location), but will not appear in the GAC:
- ActiproSoftware.PropertyGrid.Legacy.Wpf.dll
- ActiproSoftware.PropertyGrid.Interop.WinForms.Legacy.Wpf.dll
You will be able to reference the ActiproSoftware.PropertyGrid.Legacy.Wpf.dll assembly in place of the new ActiproSoftware.Grids.Wpf.dll assembly to maintain full backward compatibility with the old version, while you work on upgrading your application to the new version.
See the Licensing topic for info on how to add an entry to the licenses.licx file (updated info added in v17.1).
Do NOT reference both the ActiproSoftware.Grids.Wpf.dll and ActiproSoftware.PropertyGrid.Legacy.Wpf.dll assemblies (or similar for interop assemblies) in the same project, since they have many types/members named the same.
Again, these legacy assemblies will only be included temporarily. We encourage you to upgrade your code to the latest Grids assembly as soon as it is feasible so that you can continue to receive the latest product feature additions and bug fixes.