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
, andDefaultPartGroupVisibility
properties removed.Since a simpler
TextBox
is used for input, several properties no longer apply.BackgroundEditable
,BackgroundNonEditable
,ForegroundEditable
, andForegroundNonEditable
properties removed.Similarly,
CenterSlotHorizontalAlignment
,CenterSlotMargin
,LeftSlotMargin
, andRightSlotMargin
properties removed. If you need to alter the alignment of the text in theTextBox
, use theTextAlignment
property 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
, andCheckBoxVisibility
properties removed.The
InitialValue
property was removed since the former checkbox used to initialize it. However, numerous edit boxes have a newDefaultValue
property that is similar and is used as the value to set when incrementing/decrementing (via spinner or arrow keys) from anull
value.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
, andDropDownStaysOpen
properties removed.DropDownButtonVisibility
property removed. Use HasPopup property instead.DropDownClosed
andDropDownOpened
events removed.DropDownContent
,DropDownContentTemplate
, andDropDownContentTemplateSelector
properties removed. Each edit box now has a related picker (i.e., DatePicker for DateEditBox) and its style can be set via PopupPickerStyle. ThisStyle
value can set a newTemplate
for the picker if needed.Focus
(overload) andSelectFirstGroup
methods removed. Use the normal Focus method instead.Hint
,HintTemplate
,HintTemplateSelector
,IsHintTransitioningEnabled
, andIsHintVisible
properties removed. Use PlaceholderText property instead.IsDropDownButtonTransparencyModeEnabled
property removed. Use UsageContext property instead.IsDropDownOpen
property removed. Use IsPopupOpen property instead.IsFocusMovedOnTerminalMatches
property removed.MaxDropDownHeight
,MaxDropDownWidth
,MinDropDownHeight
, andMinDropDownWidth
properties removed.PartValueCancelTriggers
property andPartValueCancelTriggers
type removed.PartValueCommitTriggers
property renamed toCommitTriggers
, andPartValueCommitTriggers
type renamed toPartEditBoxCommitTriggers
.PromptIndicatorVisibility
property removed.SelectFirstGroup
method removed.SelectAll
method can be used instead.SpinBehavior
property renamed to SpinWrapping and relatedSpinBehavior
enum renamed toSpinWrapping
.SpinnerInactiveVisibility
property removed andSpinnerVisibility
property 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
, andSpinnerTemplate
properties removed.
In addition to the above, some number-oriented edit boxs have had these property changes:
StepValue
property 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 sameType
for 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
Value
property. So for a DoubleEditBox (which has aValue
of typeNullable<Double>
), the type for those two properties will beDouble
.AllowInfinity
andAllowNaN
properties 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
AllowGradientBrushes
property renamed to IsGradientAllowed.BrushEditorStyle
property renamed to PopupPickerStyle.BrushPreviewInactiveVisibility
property removed and swatch is always visible now.BrushPreviewMargin
property renamed to SwatchMargin.BrushPreviewPlacementOrder
property removed.BrushPreviewPlacementSlot
property removed.BrushPreviewTemplate
property removed.BrushPreviewVisibility
property renamed to HasSwatch.IsAlphaComponentEditable
property removed.IsAlphaComponentVisible
property renamed to IsAlphaEnabled.
BrushEditor Changed to BrushPicker
The BrushEditor
and BrushPreviewControl
controls have been removed. Use the new BrushPicker control instead.
Calculator Updates
DisplayMode
property removed in favor of new HasDisplay and HasMemoryButtons properties.DisplayString
property renamed to DisplayText.CalculatorCommands
class removed in favor of new command properties directly on Calculator.
ColorEditBox Updates
ColorEditorStyle
property renamed to PopupPickerStyle.ColorPreviewInactiveVisibility
property removed and swatch is always visible now.ColorPreviewMargin
property renamed to SwatchMargin.ColorPreviewPlacementOrder
property removed.ColorPreviewPlacementSlot
property removed.ColorPreviewTemplate
property removed.ColorPreviewVisibility
property renamed to HasSwatch.EditableParts
property and relatedColorEditableParts
enumeration removed.ExportFormat
property removed.Format
property removed.IsAlphaComponentVisible
property renamed to IsAlphaEnabled.
ColorEditor Changed to ColorPicker
The ColorEditor
control has been removed. Use the new ColorPicker control instead.
CornerRadiusEditBox Updates
EditableParts
property and relatedCornerRadiusEditableParts
enumeration removed.
DateTimeEditBox Updates
AnalogClockStyle
andMonthCalendarStyle
properties removed. Use PopupPickerStyle with a DateTimePicker style instead.DateValue
property removed. Use the new DateEditBox control when doing date-only selection.DefaultDropdownContentType
property removed since there are separate DateTimeEditBox, DateEditBox, and TimeEditBox controls now.EditableParts
property and relatedDateTimeEditableParts
enumeration removed.ExportFormat
property removed.
DateTimeEditor Changed to DateTimePicker
The DateTimeEditor
control has been removed. Use the new DateTimePicker control instead.
EnumEditBox Updates
EnumListBoxStyle
property renamed to PopupPickerStyle.UseDescriptionAttributes
property renamed to UseDisplayAttributes. BothDescriptionAttribute
andDisplayAttribute
are now supported.
EnumListBox Updates
DisplayMode
property and relatedEnumListBoxDisplayMode
enumeration removed.IsItemsSourceAutoUpdated
property removed.EnumListBoxStyle
property renamed to PopupPickerStyle.UseDescriptionAttributes
property renamed to UseDisplayAttributes. BothDescriptionAttribute
andDisplayAttribute
are now supported.
EnumListBoxItem Updates
DisplayMode
property removed.UseDescriptionAttributes
property removed.
GuidEditBox Updates
NewGuidButtonInactiveVisibility
property removed and swatch is always visible now.NewGuidButtonMargin
property removed.NewGuidButtonPlacementOrder
property removed.NewGuidButtonPlacementSlot
property removed.NewGuidButtonTemplate
property removed.NewGuidButtonVisibility
property removed. Set IsReadOnly totrue
to hide the button.SetValueToNewGuid
property renamed to NewGuidCommand.
Int32RectEditBox Updates
EditableParts
property and relatedRectEditableParts
enumeration removed.
MaskedTextBox Updates
MaskedTextBox
changed to inherit the nativeTextBox
control.IsMatchedChanged
event changed to be anEventHandler
.IsMatchedTerminally
property andIsMatchedTerminallyChanged
event removedMaskType
property renamed to MaskKind, and relatedMaskType
enumeration renamed to MaskKind.PromptBrush
,PromptGeometry
, andPromptIndicatorType
properties removed since MaskedTextBox now inherits the nativeTextBox
instead of rendering prompt glyphs itself.TextChanged
andTextChanging
events changed to use the nativeTextBox
versions, sinceMaskedTextBox
how inheritsTextBox
.
MonthCalendar Updates
ActiveViewMode
andMaxViewMode
properties changed to returnMonthCalendarViewMode
, renamed fromCalendarViewMode
.AreTransitionAnimationsEnabled
property removed and animations always occur.BeginUpdate
/EndUpdate
methods removed.ClearButtonContent
property changed to a string and renamed toClearButtonText
.ClearButtonContentTemplate
property removed. Use the newClearButtonStyle
property instead.DayItemStyle
andDayItemStyleSelector
properties removed. Use the newDayItemTemplate
property instead.DayOfWeekItemStyle
andDayOfWeekItemStyleSelector
properties removed. Use the newDayNameItemContainerStyle
andDayNameItemTemplate
properties instead.DecadeItemStyle
andDecadeItemStyleSelector
properties removed. Use the newDecadeItemTemplate
property instead.IsDayOfWeekHeaderVisible
property removed, and header will always be visible.MaxDate
property renamed toMaximum
.MinDate
property renamed toMinimum
.MonthItemStyle
andMonthItemStyleSelector
properties removed. Use the newMonthItemTemplate
property instead.NextViewButtonStyle
andPreviousViewButtonStyle
properties removed. Use the newNavigationButtonStyle
property instead.Refresh
method added a parameter.SelectedDates
property changed to use a newDateRangeCollection
implemention in the Shared Library.SelectionChanged
event declaration changed.SelectionChanging
event removed.SelectionMode
property changed to returnMonthCalendarSelectionMode
, renamed fromCalendarSelectionMode
.ViewResetMode
property changed to returnMonthCalendarViewResetMode
, renamed fromCalendarViewResetMode
.WeekNumberItemStyle
andWeekNumberItemStyleSelector
properties removed. Use the newWeekNumberItemContainerStyle
andWeekNumberItemTemplate
properties instead.YearItemStyle
andYearItemStyleSelector
properties removed. Use the newYearItemTemplate
property instead.
PasswordBox Removed
Use the native PasswordBox
control instead.
PointEditBox Updates
EditableParts
property and relatedPointEditableParts
enumeration removed.
Rating Updates
IsReadOnly
property removed. Set theIsEnabled
property tofalse
to simulate read-only mode.
RatingItem Updates
HoverGlyphTemplate
,SelectedAlternateBackgroundGlyphTemplate
, andSelectedAlternateForegroundGlyphTemplate
properties replaced by the ActiveGlyphTemplate and AverageGlyphTemplate properties.
RectEditBox Updates
EditableParts
property and relatedRectEditableParts
enumeration removed.
SizeEditBox Updates
EditableParts
property and relatedSizeEditableParts
enumeration removed.
Spinner Updates
CommandTarget
property removed.DecrementValue
property renamed to DecrementCommand.IncrementValue
property renamed to IncrementCommand.
TextBox Removed
Use the native TextBox
control instead.
ThicknessEditBox Updates
EditableParts
property and relatedThicknessEditableParts
enumeration removed.
TimeEditor Changed to TimePicker
The TimeEditor
control has been removed. Use the new TimePicker control instead.
TimeSpanEditBox Updates
EditableParts
property and relatedTimeSpanEditableParts
enumeration removed.ExportFormat
property removed.
VectorEditBox Updates
EditableParts
property and relatedVectorEditableParts
enumeration 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:
IDataAccessor
interface is nowIDataModel
.DataAccessorBase
class is nowDataModelBase
.IPropertyDataAccessor
interface is nowIPropertyModel
.PropertyDataAccessorBase
class is nowPropertyModelBase
.CachedPropertyDataAccessorBase
class is nowCachedPropertyModelBase
.PropertyDescriptorDataAccessorBase
andPropertyDescriptorDataAccessor
classes are nowPropertyDescriptorPropertyModel
.CollectionPropertyDescriptorDataAccessor
class is nowCollectionPropertyDescriptorPropertyModel
.MergedPropertyDataAccessor
class is nowMergedPropertyModel
.ImmutablePropertyDescriptorDataAccessor
class 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.ICategoryDataAccessor
interface is nowICategoryModel
.CategoryDataAccessor
class is nowCategoryModel
.PropertyGridCategoryItem
(a class you could use to directly define a category in XAML) is removed. Instead, addPropertyModel
instances to the PropertyGrid.Properties collection and assign the proper category name to eachPropertyModel
. The properties will be automatically categorized by the data factory.ICategoryEditorDataAccessor
interface is nowICategoryEditorModel
.CategoryEditorDataAccessor
class 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:
CanReset
property is nowCanResetValue
.IsMergable
property is nowIsMergeable
.IsReadOnly
property is nowIsValueReadOnly
.IsReadOnly
is still there, but is now a resolved value per below.- One
Refresh
method overload removed. Reset
method is nowResetValue
.ValueName
property 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.
ItemContextMenuOpening
event renamed to ItemMenuRequested and now uses TreeListBoxItemMenuEventArgs.PropertyChanged
event renamed to PropertyValueChanged and now uses PropertyModelValueChangeEventArgs.PropertyChanging
event renamed to PropertyValueChanging and now uses PropertyModelValueChangeEventArgs.PropertyChildAdded
event renamed to ChildPropertyAdded and now uses PropertyModelChildChangeEventArgs.PropertyChildAdding
event renamed to ChildPropertyAdding and now uses PropertyModelChildChangeEventArgs.PropertyChildRemoved
event renamed to ChildPropertyRemoved and now uses PropertyModelChildChangeEventArgs.PropertyChildRemoving
event renamed to ChildPropertyRemoving and now uses PropertyModelChildChangeEventArgs.SelectedObjectsChanged
event 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:
AreEmptyAccessorsFiltered
property removed, as it is no longer needed.BeginUpdate
andEndUpdate
optimization methods removed, since performance is very fast in the new version even without them.CollectionConverter
property removed, which was used byCollectionPropertyDescriptorDataAccessor
. The new virtual CollectionPropertyDescriptorPropertyModel.CreateExpandableCollectionConverter method now creates the ExpandableCollectionConverter to use.CollectionDisplayMode
property renamed to CollectionPropertyDisplayMode and relatedPropertyGridCollectionDisplayMode
enum renamed to CollectionPropertyDisplayMode.CommitPendingChanges
method renamed to TryCommitPropertyValueEdit.EscapeKeyDownDelegates
property renamed to CancelPropertyValueEditHandlers and the dictionary values are now of type PropertyGridItemActionHandler.TextInputFocusDelegates
property renamed to StartPropertyValueEditHandlers and the dictionary values are now of type PropertyGridItemActionHandler.Hint
,HintTemplate
, andHintTemplateSelector
properties removed. Use the new EmptyContent and EmptyContentTemplate properties instead.IsAsynchronous
andIsItemsSourceAutoUpdated
properties removed since they are no longer needed due to performance improvements.- The
NameCellContainerStyle
,NameTemplateSelector
,ValueCellContainerStyle
, andValueTemplateSelector
properties 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
ShowPropertyDialogCommand
property 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.