[Expand]General Information
[Expand]WinForms Controls
[Expand]ASP.NET Controls and MVC Extensions
[Expand]ASP.NET Bootstrap Controls
[Expand]ASP.NET Core Bootstrap Controls
[Collapse]WPF Controls
  Prerequisites
 [Expand]What's Installed
 [Expand].NET Core 3 Support
 [Expand]Common Concepts
 [Expand]MVVM Framework
 [Expand]Controls and Libraries
 [Expand]Scaffolding Wizard
 [Expand]Localization
  Redistribution and Deployment
  Get More Help
 [Collapse]API Reference
  [Expand]DevExpress.Charts.Designer
  [Expand]DevExpress.Data
  [Expand]DevExpress.Mvvm.UI
  [Expand]DevExpress.Mvvm.UI.Interactivity
  [Expand]DevExpress.Mvvm.UI.ModuleInjection
  [Expand]DevExpress.Xpf.Accordion
  [Expand]DevExpress.Xpf.Bars
  [Expand]DevExpress.Xpf.Carousel
  [Expand]DevExpress.Xpf.Charts
  [Expand]DevExpress.Xpf.Charts.Localization
  [Expand]DevExpress.Xpf.Charts.RangeControlClient
  [Expand]DevExpress.Xpf.ChunkList
  [Expand]DevExpress.Xpf.Controls
  [Expand]DevExpress.Xpf.Core
  [Expand]DevExpress.Xpf.Core.ConditionalFormatting
  [Expand]DevExpress.Xpf.Core.DataSources
  [Expand]DevExpress.Xpf.Core.FilteringUI
  [Expand]DevExpress.Xpf.Core.Native
  [Expand]DevExpress.Xpf.Core.ServerMode
  [Expand]DevExpress.Xpf.Data
  [Expand]DevExpress.Xpf.DataAccess
  [Expand]DevExpress.Xpf.DataAccess.DataSourceWizard
  [Collapse]DevExpress.Xpf.Diagram
   [Expand]DiagramCommands Class
   [Expand]DiagramConnectionChangedEventArgs Class
   [Expand]DiagramConnectionChangingEventArgs Class
   [Expand]DiagramConnector Class
   [Expand]DiagramContainer Class
   [Expand]DiagramContainerBase Class
   [Expand]DiagramContentItem Class
   [Collapse]DiagramControl Class
     DiagramControl Members
     DiagramControl Constructor
    [Expand]DiagramControl Properties
    [Collapse]DiagramControl Events
      AddingNewItem Event
      BeforeItemsMoving Event
      BeforeItemsResizing Event
      BeforeItemsRotating Event
      CanvasBoundsChanged Event
      ClosedEditor Event
      ConnectionChanged Event
      ConnectionChanging Event
      ContainerIsCollapsedChanged Event
      ContainerIsCollapsedChanging Event
      CustomCursor Event
      CustomGetEditableItemProperties Event
      CustomGetEditableItemPropertiesCacheKey Event
      CustomGetSerializableItemProperties Event
      CustomItemDrag Event
      CustomItemDragResult Event
      CustomItemGiveFeedback Event
      CustomItemQueryContinueDrag Event
      CustomLoadDocument Event
      CustomLoadImage Event
      CustomSaveDocument Event
      DeletingItems Event
      DocumentLoaded Event
      ExceptionMessage Event
      ItemBoundsChanged Event
      ItemContentChanged Event
      ItemCreating Event
      ItemDrawing Event
      ItemInitializing Event
      ItemsChanged Event
      ItemsDeleting Event
      ItemsMoving Event
      ItemsPasting Event
      ItemsResizing Event
      ItemsRotating Event
      QueryConnectionPoints Event
      QueryItemDrawAction Event
      QueryItemEditAction Event
      QueryItemsAction Event
      QueryItemSnapping Event
      RelayoutItemsCompleted Event
      SelectionChanged Event
      ShowingEditor Event
      ShowingOpenDialog Event
      ShowingOpenImageDialog Event
      ShowingSaveDialog Event
      SubordinatesHidden Event
      SubordinatesHiding Event
      SubordinatesShowing Event
      SubordinatesShown Event
      ZoomFactorChanged Event
    [Expand]DiagramControl Methods
   [Expand]DiagramCustomCursorEventArgs Class
   [Expand]DiagramCustomGetEditableItemPropertiesEventArgs Class
   [Expand]DiagramCustomItemDragEventArgs Class
   [Expand]DiagramCustomItemQueryContinueDragEventArgs Class
   [Expand]DiagramDataBindingBehavior Class
   [Expand]DiagramDataBindingBehaviorBase Class
   [Expand]DiagramDesignerControl Class
    DiagramDrawingContext Enumeration
   [Expand]DiagramImage Class
   [Expand]DiagramItem Class
   [Expand]DiagramItemBoundsChangedEventArgs Class
   [Expand]DiagramItemContentChangedEventArgs Class
   [Expand]DiagramItemCreatingEventArgs Class
   [Expand]DiagramItemDrawingEventArgs Class
   [Expand]DiagramItemInitializingEventArgs Class
   [Expand]DiagramItemsChangedEventArgs Class
   [Expand]DiagramItemsDeletingEventArgs Class
   [Expand]DiagramItemsGeneratedEventArgs Class
   [Expand]DiagramItemsMovingEventArgs Class
   [Expand]DiagramItemsPastingEventArgs Class
   [Expand]DiagramItemsResizingEventArgs Class
   [Expand]DiagramItemsRotatingEventArgs Class
   [Expand]DiagramOrgChartBehavior Class
   [Expand]DiagramQueryConnectionPointsEventArgs Class
   [Expand]DiagramQueryItemDrawActionEventArgs Class
   [Expand]DiagramQueryItemEditActionEventArgs Class
   [Expand]DiagramQueryItemsActionEventArgs Class
   [Expand]DiagramQueryItemSnappingEventArgs Class
   [Expand]DiagramShape Class
   [Expand]DiagramShowingOpenDialogEventArgs Class
   [Expand]DiagramShowingOpenImageDialogEventArgs Class
   [Expand]DiagramShowingSaveDialogEventArgs Class
  [Expand]DevExpress.Xpf.Dialogs
  [Expand]DevExpress.Xpf.Docking
  [Expand]DevExpress.Xpf.Docking.Base
  [Expand]DevExpress.Xpf.DocumentViewer
  [Expand]DevExpress.Xpf.DXBinding
  [Expand]DevExpress.Xpf.Editors
  [Expand]DevExpress.Xpf.Editors.DataPager
  [Expand]DevExpress.Xpf.Editors.DateNavigator
  [Expand]DevExpress.Xpf.Editors.ExpressionEditor
  [Expand]DevExpress.Xpf.Editors.ExpressionEditor.Native
  [Expand]DevExpress.Xpf.Editors.Filtering
  [Expand]DevExpress.Xpf.Editors.Flyout
  [Expand]DevExpress.Xpf.Editors.Flyout.Native
  [Expand]DevExpress.Xpf.Editors.Helpers
  [Expand]DevExpress.Xpf.Editors.Native
  [Expand]DevExpress.Xpf.Editors.Popups
  [Expand]DevExpress.Xpf.Editors.RangeControl
  [Expand]DevExpress.Xpf.Editors.Settings
  [Expand]DevExpress.Xpf.Editors.Validation
  [Expand]DevExpress.Xpf.ExpressionEditor
  [Expand]DevExpress.Xpf.Gantt
  [Expand]DevExpress.Xpf.Gauges
  [Expand]DevExpress.Xpf.Gauges.Localization
  [Expand]DevExpress.Xpf.Grid
  [Expand]DevExpress.Xpf.Grid.ConditionalFormatting
  [Expand]DevExpress.Xpf.Grid.LookUp
  [Expand]DevExpress.Xpf.Grid.TreeList
  [Expand]DevExpress.Xpf.Layout.Core
  [Expand]DevExpress.Xpf.LayoutControl
  [Expand]DevExpress.Xpf.Map
  [Expand]DevExpress.Xpf.NavBar
  [Expand]DevExpress.Xpf.Navigation
  [Expand]DevExpress.Xpf.PdfViewer
  [Expand]DevExpress.Xpf.PivotGrid
  [Expand]DevExpress.Xpf.PivotGrid.Printing
  [Expand]DevExpress.Xpf.Printing
  [Expand]DevExpress.Xpf.Printing.Parameters
  [Expand]DevExpress.Xpf.Printing.Parameters.Models
  [Expand]DevExpress.Xpf.Printing.PreviewControl
  [Expand]DevExpress.Xpf.Printing.PreviewControl.Bars
  [Expand]DevExpress.Xpf.Prism
  [Expand]DevExpress.Xpf.PropertyGrid
  [Expand]DevExpress.Xpf.Reports.UserDesigner
  [Expand]DevExpress.Xpf.Reports.UserDesigner.Extensions
  [Expand]DevExpress.Xpf.Reports.UserDesigner.Localization
  [Expand]DevExpress.Xpf.Reports.UserDesigner.ReportWizard
  [Expand]DevExpress.Xpf.Reports.UserDesigner.ReportWizard.Pages
  [Expand]DevExpress.Xpf.Ribbon
  [Expand]DevExpress.Xpf.RichEdit
  [Expand]DevExpress.Xpf.RichEdit.Menu
  [Expand]DevExpress.Xpf.Scheduler
  [Expand]DevExpress.Xpf.Scheduler.Drawing
  [Expand]DevExpress.Xpf.Scheduler.Menu
  [Expand]DevExpress.Xpf.Scheduler.Reporting
  [Expand]DevExpress.Xpf.Scheduler.UI
  [Expand]DevExpress.Xpf.Scheduling
  [Expand]DevExpress.Xpf.Scheduling.Common
  [Expand]DevExpress.Xpf.Scheduling.Editors
  [Expand]DevExpress.Xpf.Scheduling.iCalendar
  [Expand]DevExpress.Xpf.Scheduling.Reporting
  [Expand]DevExpress.Xpf.Scheduling.Visual
  [Expand]DevExpress.Xpf.Scheduling.VisualData
  [Expand]DevExpress.Xpf.SpellChecker
  [Expand]DevExpress.Xpf.Spreadsheet
  [Expand]DevExpress.Xpf.Spreadsheet.Menu
  [Expand]DevExpress.Xpf.TreeMap
  [Expand]DevExpress.Xpf.Utils.Themes
  [Expand]DevExpress.Xpf.WindowsUI
  [Expand]DevExpress.Xpf.WindowsUI.Internal
  [Expand]DevExpress.Xpf.WindowsUI.Navigation
  [Expand]DevExpress.XtraRichEdit
  [Expand]DevExpress.XtraRichEdit.Printing
[Expand]Xamarin Controls
[Expand]Windows 10 App Controls
[Expand]Office File API
[Expand]Reporting
[Expand]Report and Dashboard Server
[Expand]Dashboard
[Expand]eXpressApp Framework
[Expand]eXpress Persistent Objects
[Expand]CodeRush
[Expand]CodeRush Classic
[Expand]Cross-Platform Core Libraries
[Expand]Tools and Utilities
 End-User Documentation
View this topic on docs.devexpress.com (Learn more)

DiagramControl.CustomGetEditableItemProperties Event

Allows you to modify the list of diagram item properties that can be edited by end-users in the Properties Panel.

Namespace:DevExpress.Xpf.Diagram
Assembly:DevExpress.Xpf.Diagram.v19.1.dll

Expanded Syntax

Expanded Event Data

The event handler receives an argument of type DiagramCustomGetEditableItemPropertiesEventArgs containing data related to this event.

The following DiagramCustomGetEditableItemPropertiesEventArgs properties provide information specific to this event.
Property Description
Item Returns the diagram item selected by the user.
Properties Provides access to the collection of item properties the user can edit in the Properties Panel.

Expanded Remarks

Expanded Add Properties

The following code snippet illustrates how to add the DiagramItem.CanSnapToThisItem property for shapes.

You can add properties from a custom DiagramItem (see DiagramItem) descendant and other sources, such as objects stored in DataContext.

Add a Shape Descendant's Property

To add a property from a DiagramShape (see DiagramShape) descendant, obtain the PropertyDescriptor (see System.ComponentModel.PropertyDescriptor) for the required property using the System.ComponentModel.TypeDescriptor.GetProperties method and add it to the DiagramItemCreatingEventArgs.Properties collection. See the example below.

The Properties panel uses the INotifyPropertyChanged (see System.ComponentModel.INotifyPropertyChanged) interface to receive notifications about updates in the source object. To support property synchronization when the Info property is modified, implement the INotifyPropertyChanged interface in the CustomDiagramShape class and raise the PropertyChanged event in the Info property setter.

Note

To use diagram item descendants in a DiagramControl, register them using the DevExpress.Diagram.Core.DiagramItemTypeRegistrator.Register method. To use custom diagram item types instead of the regular ones, handle the ItemCreating event.

Add Independent Properties

The Properties panel allows users to edit properties that are not defined directly at the DiagramItem (see DiagramItem) level. This can be useful when your diagram is bound to a data source and you need to edit data item properties. For this purpose, DiagramCustomGetEditableItemPropertiesEventArgs provides the CreateProxyProperty method that allows you to create a custom property descriptor.

Add the property descriptor to the DiagramCustomGetEditableItemPropertiesEventArgs.Properties collection to edit a custom property. For instance, if the DiagramShape (see DiagramShape)'s DataContext contains an instance of the Customer class, you can add the Customer.Name property to the Properties panel using the following code:

Expanded Use Different Properties for Items of the Same Type

DiagramControl caches property descriptors for items of the same type. Handle the CustomGetEditableItemPropertiesCacheKey (see CustomGetEditableItemPropertiesCacheKey) event to conditionally choose required properties for diagram items of the same type.

Expanded Remove Properties

Tip

If you restrict user actions using protection options, the corresponding properties will automatically be removed from the Properties panel. For instance, if you set the AllowResizeItems property to false, the Width and Height properties will be removed from the panel. The diagram protection options are listed in the IsReadOnly property description.

To remove a property from the Properties panel, handle the CustomGetEditableItemProperties and remove the corresponding property descriptor from the Properties collection. See the example below.

Expanded Customize Properties

Customize Property Names

To customize a property name, handle the CustomGetEditableItemProperties event. Create a custom property descriptor wrapper by calling the CreateProxyProperty method and use the DisplayNameAttribute attribute.

The example below illustrates how to rename the Content property.

Customize Property Editors

To use a custom control to edit a property, create a property descriptor wrapper using CreateProxyProperty and pass an instance of PropertyGridEditorAttribute to this wrapper. Add this attribute to the property descriptor wrapper and define a template for your editor in diagram resources. The example below illustrates how to use a ComboBoxEdit (see ComboBoxEdit) to edit the diagram item's content.

The PropertyGridControl (see PropertyGridControl) locates your template using the specified TemplateKey. Note that the editor’s name should be set to PART_Editor.

Expanded Validation

The PropertyGridControl (see PropertyGridControl) supports attribute-based validation that allows you to define validation rules for edited properties. The following code snippet adds a validation attribute that prevents users from typing a text string longer than five symbols:

You can use the following attributes for validation:

Note that it’s necessary to add a reference to the System.ComponentModel.DataAnnotations assembly to use these attributes.

Expanded See Also

Is this topic helpful?​​​​​​​