Version 3.0 is the current major release of yFiles WPF. (See also the entire yFiles WPF change log.)
awaitkeyword where code is written close to how synchronous code would look like instead of chaining callbacks. This also simplifies exception handling which works as usual via
catchinstead of callbacks.
LayoutDataclass and its sub-classes can be used to pass configuration data to a layout algorithm by setting properties instead of registering
DataProviders on the graph which have to be filled with this data. This reduces the code needed to configure a layout and is more flexible as well as reusable. As most subclasses of
LayoutDataare specialized for one layout algorithm, their properties provide a good overview which data can be passed to the algorithm.
SeriesParallelLayoutfor graphs that are constructed only by series (combining two series parallel graphs by merging the source of one graph with the sink of the other) and parallel (combining two series parallel graphs by merging the sources and the sinks) operations.
CircularLayout: Edge bundling is applied to edges of the same partition.
TreeReductionStage: Edge bundling is applied to non-tree edges.
RadialLayout: Edge bundling is applied to non-tree edges.
OrganicLayoutnow supports the detection of regular substructures in the graph (see
OrganicLayout.ParallelSubstructureStyle) and applies a specific layout style to them such that they can be better recognized.
TreeLayout. A tree node can have multiple parents that are connected to all of its siblings and share the same parents. This might come to use in organizational charts where a team answers to multiple superiors.
RecursiveGroupLayout: Added the
InterEdgeRouterproperty to specify an edge router to layout edges that cross group node bounds. Thus, it is not necessary to subclass the layout algorithm to change inter-edge routing anymore.
HierarchicLayoutsupports recursively routed edges. Edges that pass the border of group nodes will always leave at the bottom side and enter at the top side of the group node. This routing style is specified using
HierarchicLayout: Improved from-sketch behavior for groups with changed bounds (e.g. after folding or expanding a group node).
HierarchicLayout: Added support for port grouping, see
PortConstraintKeys.TARGET_PORT_GROUP_ID_DP_KEY. Edges are bundled at their ports, but routed independently.
HierarchicLayoutnow allows to specify the directedness of edges, see
HierarchicLayout.EDGE_DIRECTEDNESS_DP_KEY. This new feature enables to, for example, support mixed graphs that contain both directed and undirected edges: While for directed edges the layering step tries to find a solution where the source of an edge is placed above the target (with respect to the main layout direction), for undirected edges the direction doesn't matter and the edge may also be inserted as same-layer edge. This feature also enables to force some edges to specifically point against the main layout direction.
HierarchicLayout: Added support for edges with a specific thickness. Minimum distances in the layout will consider these thicknesses, see
outparameters have been replaced with a suitable structure as return type. The most prominent example of this change are the various
GeneralPaththat now return a
LabelSnapContextnow have that parameter as their first parameter.
yWorks.Graphcontains types related to the graph structure, including label models and port location models.
yWorks.Controlscontains types related to the
CanvasControl, and to the visualization in general.
yWorks.Graph.Stylescontains the style implementations.
yWorks.Controls.Inputcontains the types related to input modes.
yWorks.Algorithms, and the namespaces that correspond to a specific layout style.
Contexts: Factory methods replace the removed classes
Lookups: Factory methods replace the removed properties
Animations: Factory methods replace the removed classes
PortCandidateProviders: Factory methods replace all existing non-
PortCandidateProviderBaseremains for an easier start for own implementations.
EdgeReconnectionPortCandidateProviders: Factory methods replace all existing implementations.
IGraphnow supports grouping by default. The
GroupingSupportedproperty has been removed from
DefaultGraph. Grouping is now always enabled for graphs.
GraphEditorInputModeallows for switching interactive grouping operations on or off. Grouping operations are disabled by default and have to be enabled explicitly if the input mode should support them.
IHierarchy<T>have been removed and folded with
Rootproperty is no longer available. The root of a grouping hierarchy is now represented by
AddPort: Ambiguous overloads have been removed, missing overloads have been added and parametershave been ordered to be consistent throughout all overloads.
Portsproperties have been changed from
IListEnumerable. To be notified of created or removed items, the corresponding
IGraphevents should be used instead.
IGraphhave been replaced by the extension methods
Bendshave been removed.
Bendshas been replaced by the
ListLabelCollectionhave been removed. Use
IGraphnow provides events for property changes on model items, e.g.
NodeLayoutChanged, etc. Those events replace the dedicated change reporters available previously (e.g.
ILabelTextChangeReporter, etc.), which have been removed.
IGraphAPI have been made consistent using properly typed
EventArgssubtypes. Exceptions are a few events that are raised very often which retain an argument list to improve performance.
SetLeafand related properties and events have been replaced by
SetIsGroupNodewhich have the exact opposite meaning from the old ones.
IGraph.AddBendhas changed. The index parameter has been moved to the end and made optional.
IGraphStructureinterface and its
SimpleGraphStructureimplementation have been removed, as well as
DefaultGraph's constructor that accepted an
IGraphnow extends the
ITagOwnerinterface. Thus graphs now have a
DefaultGraphnow raises removal events for labels, ports, and bends which are implicitly removed when their owner is removed.
DefaultGraphhave been removed:
CreateMapperRegistry, amongst others.
GetBoundshas been removed from
UsePortCandidateProvidershas been removed from both
GraphSettings. Creating an edge using port candidate providers has to be done by manually querying the provider and calling
IsInitiallyExpandedhas been removed from
IFoldedGraph. The methods
SetInitiallyExpanded, and the property
DefaultExpandedPredicatehave been removed from
IFoldedGraph) now also work with nodes that belong to the master graph instead of the view graph. Thus the collapsed/expanded state can be set or queried for items that are currently not in the view graph. This replaces part of the removed functionality mentioned above.
IChangeLabeledItemAppearanceCallbackas well as the
FoldingManager.GetChangeDummyAppearanceCallbackmethods have been removed. The view state properties can now directly be changed on the view state implementations returned by
IFoldedGraph.IsDummy) now throws an
ArgumentExceptionfor labels and ports that are not part of this view. Previously, this method returned
truefor such items. Since this exception is already thrown for nodes, edges, and bends that are not part of this view, the behavior is now the same for all types of graph items.
ILabelModel.GetGeometryhas been changed to
FreeNodeLabelModel.CreateNodeLayoutAnchoredhave been removed.
FreeNodeLabelModel.CreateDefaultParameternow uses the label's center as its anchor point.
EdgePathLabelModelhave been added.
EdgeSegmentLabelModelallows to create parameters for a segment index and segment ratio while
EdgePathLabelModelcreates parameters using a ratio of the edge path.
IPort.Location(to obtain a snapshot of the port's location) has been replaced by the extension method
GetLocation. To retrieve a live view of the location of a port, use the new extension method
NodeScaledPortLocationModelhas been replaced by
FreeNodePortLocationModelthat allows to specify the port location by a ratio of the node layout's size and an additional offset. The placement options and API are very similar to
AnchoredPortLocationModelhas been removed.
CreateColumnhas changed. The index parameter has been moved to the end and made optional.
StripeEventArgsnow. The corresponding event raiser methods have been changed accordingly.
RemoveUndoSupport, some overloads of
CreateColumn, some overloads of
DefaultRowLookuphave been added, which replace the removed classes with the same same.
GetElementsToMovemethod has been removed
IStripeSelection.SelectedStripesproperty has been removed. Use the individual properties for
StripeSelection: The superfluous overloads of
IColumnhave been removed.
PlaceNodeInCellhas been added to
ITableto easily move a node into a specific table cell.
Tagproperty on model items and the graph now works with Undo.
IGraph.BeginEditextension method that work with
IMementoSupportProvider) have been added.
IGraph.BeginEditextension method that accepted an
IModelItemshas been removed.
MementoStateStructhave been removed.
IUndoUnit: The methods
CanRedohave been removed.
UndoUnitBasehave been removed. Implementations should use
UndoEnginehave been removed.
IGraphUndoUnitSupporthas been removed. Its methods
Create...UndoUnithave been moved to
DefaultGraph. Developers who have created a custom implementation have to derive from
DefaultGraphand override the corresponding method(s).
yWorks.Geometrynamespace has been simplified and cleaned up.
InsetsDhave been made immutable.
ImmutableOrientedRectanglehave been removed. The immutable types
RectDas well as the immutable instance provided by the new static method
OrientedRectangle.CreateImmutablecan be used instead.
ISizeSetterhave been removed. Instead the interfaces
IReshapeableinterface has been removed. The various overloads of the
Reshapemethod have been implemented as extension methods on
IMovablehas been removed as well. Instead an
IPositionHandlercan be used.
RectD.FromRectanglehave been removed and replaced by the extension methods
SizeD.Zerohave been added.
ContentRectwill now also be updated when creating edges, adding, editing or moving labels or deleting graph items.
Pastecommands are no longer handled by
GraphControland the respective methods have been removed as well. Command bindings for
Copyare still supplied by
GraphEditorInputMode. Command bindings for
Pasteare still supplied by
Redocommands are no longer handled by
GraphControland the respective methods have been removed as well. Command bindings for
Redoare still supplied by
GraphEditorInputMode. Furthermore, the respective methods can still be called on the UndoEngine directly.
UndoabilityEnabledproperty has been removed.
Redocommand bindings can be enabled on
ClipboardEnabledproperty has been removed. Clipboard command bindings can be enabled on
GetUndoEnginemethod has been removed. The current
UndoEnginecan be retrieved from the graph instead.
SelectionChangedevent has been removed.
LastEventLocationalways contains the location of the last mouse or touch event.
MouseWheelBehaviorproperty replaces the previous property
AutoMouseWheelZoomEnabledand not only allows disabling mouse wheel zoom, but also enabling scrolling with the mouse wheel.
AddGroupToGrouphave been removed as the new methods
ICanvasObjectGroupprovide a more intuitive way to add child elements to e.g. the
InputModesproperty has been removed. Developers who want to install multiple input modes on a
CanvasControlhave to set a
CanvasControl.InputModeand add their input modes to that mode.
CollectCanvasObjectsmethod has been removed.
SimplePortStyle. Instead, use
IStripeStylefor styles of
NodeStyleStripeStyleAdapter, you can still use node styles as styles for columns and rows.
ITableProvider, and all implementations.
IStyleRendererimplementations: The accessibility of the
Itemproperties has been reduced to protected. In addition, the latter has been renamed to
IModelItemInstallerand related interfaces and classes. Styles no longer implement
IModelItemInstaller, simplifying certain custom style implementations.
Animator.AnimateAndWaithas been removed.
Animator.Animatethat accept a callback for finishing the animation have been removed. Instead the new Task-based overloads can be used.
GraphModelManager's Installer properties (
NodeStyleInstaller, etc.) have been removed.
GraphModelManager.Invalidatehas been removed.
Visuals which have been created by
IVisualCreator.CreateVisual. Add methods
IRenderContext.Canvasmethod has been pulled up to
ICanvasContextand renamed to
Transformproperty has been removed.
RenderContextclass has been removed. Use
CanvasControl.CreateRenderContextinstead to retrieve an instance of
DefaultEdgePathCroppernow uses the new method
HandleEmptyPathif cropping the edge would result in an empty path. By default this method crops at the ports instead which results in edges between a group node and one of its children being no longer hidden.
DefaultEdgeIntersectionCalculator: A callback method
GetNodeGeometryhas been added.
ModelManagerhas been replaced with the
ItemModelManagerhas been replaced with the
CanvasObjectGroupproperty and the
GetCanvasObjectGroupmethod; the default implementation just defers to the property, just like
IGroupActionas well as
ICanvasObjectGroup.GetGroupActionhave been removed as they had hardly any use.
ICanvasGroupProviderand the delegate
CanvasObjectGroupProviderCallbackhave been removed. Accessing the individual CanvasObjectGroups can be done via the properties of
ICanvasObjectTreeEventSourceand the corresponding classes
CanvasObjectInvalidateEventArgshave been removed.
GraphEditorInputModenow directly implement
IInputModewithout any abstract base classes in between.
IConcurrentInputModehas been removed and merged with
Enabledproperty on the
IInputModeinterface has been removed. It is still present on all concrete implementations.
ConcurrencyControllerproperty has been removed. Instead, a parameter of type
ConcurrencyControllerhas been added to the
AbstractInputMode(which has been renamed to
InputModeBase) have been removed.
AbstractConcurrentInputModehas been merged into
ConcurrencyControllerproperty has been removed. Input modes now get a
ConcurrencyControlleras parameter of their
ConcurrencyControllerhas been refactored and is now only responsible for a single input mode. Its
Activeproperty indicates if the input mode currently has or may request the mutex.
InputMutexclass has been removed.
PreferredCursorproperty has been moved from
ConcurrencyController. Most input modes don't provide the methods
IInputModesis not set to
falseanymore if another input mode acquires the mutex. Instead their
ConcurrencyControlleris deactivated. This provides a clear separation between suppressing input modes (while another mode holds the mutex) and explicitly disabling a mode from user code (via the
EnabledChangedevent and the
OnDisabledmethods anymore, but
IInputModehas a new property
Prioritywhich defines the installation priority of the input mode. Previously those have been available as properties on
TableEditorInputMode. Those have been removed.
Stopmethod has been renamed to
TryStopto make it more obvious that an implementation might return
falseto indicate that it did not actually stop.
Canceledevents. Developers who want to get notified when an input mode gets stopped or canceled have to override the
OnCanceledmethods. Also, the events
Initializedno longer exist. Input modes that need to perform one-time initialization on first
Installcan keep track of that themselves.
AddConcurrentmethods as well as the
Addmethod which takes an additional priority parameter have been removed. There is only one
Addmethod left, which takes an input mode as its only parameter. Priority is determined by the input mode's
Priorityproperty. Whether an input mode runs exclusive or always active alongside other input modes is determined by the input mode's
ConcurrencyControllerwhich has an
Exclusiveproperty controlling that. This property is also available for all default
MultiplexingInputModeis now aware of changes to the priority of already installed input modes and will update the installation order accordingly when an input mode's priority is changed.
IInputModes in general:
GraphSelectionproperties, if present, and its associated
Set*methods have been removed. Both are now always retrieved from the input mode context dynamically.
InputModeContexthas been introduced to expose the
IInputModeContextthe mode is installed in.
GraphEditorInputModehave been made more similar regarding customization in the capabilities they both provide:
GraphViewerInputModenow supports the same click and selection behavior as
GraphEditorInputMode. This includes detail selection (Shift+Click) and cyclic selection (Alt+Click) as well as finer control over behavior like the
ClickSelectableItemsproperty and the
DoubleClicknow take an
ClickEventArgsas arguments and have no return value. Instead of returning a boolean, the
Handledproperty on the
ClickEventArgsshould be set.
ClickInputModeinstances is now configured to raise events for both left and right clicks.
DoubleClickHitTestOrderproperty. By default, this hit-test order prefers labels over other graph elements.
GraphViewerInputModenow also has the
AvailableCommandsproperty, already known from
GraphViewerInputModehave been changed and most of them now have the same priorities as in
CanvasClickedevent reports clicks on an empty canvas location.
SelectablePredicateproperty allows finer control over what particular items should be selectable without the need to create a custom subclass.
GraphViewerInputModenow has improved support for marquee selection. Marquee selection is no longer turned on or off via
MarqueeSelectableItemsbut instead directly on the
MarqueeSelectionInputMode. The recognizer for marquee selection is Shift+Drag and the child input mode priorities have been adjusted accordingly so that marquee selection and viewport movement can co-exist. The child input mode still defaults to being disabled, though.
GraphViewerInputModenow also has a
GraphViewerInputModenow allows copying items (including the convenience method) and handles the command appropriately.
ShowHandleItemsproperty will now immediately update the currently visible handles.
DeletablePredicateproperty allows finer control over what particular items should be deletable without the need to create a custom subclass.
LabelEditingevents have been added. Those allow fine-grained control over adding or editing labels and tie into the existing functionality provided by
TextEditorInputModenow ensures that the TextBox is visible in the viewport when starting editing. This behavior can be adjusted by creating a custom subclass and overriding the
OrthogonalBendRemovalproperty has been changed from
DeletedSelectionevents now use
IGraphSelectionarguments have been removed, as well as the protected methods
OnGraphChangedand the protected setter for the
GraphSelectionproperty. Instead, the
IGraphinstance is now always taken from the
InputModeContextand cannot be changed after the mode is installed.
CreateDefaultLabelConfigurationmethod has been removed.
MarqueeSelect<T>(RectD,IEnumerable<T>)method has been removed.
SelectionModelproperty has been removed. Instead the
GraphSelectionproperty is used.
CollectionModelproperty has been removed. Instead the model items of the
Graphproperty are used.
GraphInputModeControllerproperty has been removed.
DoubleClickedevents have been removed.
FindItemhas been removed. An additional overload of
FindItemswithout the context parameter has been added. To replicate the previous behavior of
FindItemscan be called and the first element taken from the resulting enumeration.
ShouldBeMovableForMoveInputModehas been removed.
ItemSelectedevent has been removed.
ClipboardCommandsEnabledhas been removed.
CreateEdgeInputMode has been refactored and streamlined:
ConnectToCandidatesOnlyproperty has been removed. Edge creation now always uses port candidates.
PortBasedEdgeCreationCallbackhave been replaced by the new
EdgeCreatorwhich is always port-based.
GetTargetNodehave been replaced by
TargetPortCandidateare no longer read-only.
AssignEdgeStyleas well as the
EdgeStyleproperty have been removed. Instead the new
EdgeDefaultsproperty can be used to customize the new edge.
UseHitNodeTargetCandidatesOnlyproperty has been replaced by the new
OrthogonalEdgeCreationproperty has been changed from
DummyEdgeGraphproperty is used to create the dummy edge that visualizes the edge during creation.
SnapToTargetCandidateOwnerproperty has been removed. The preview edge now is always being cropped at the candidate owner's borders.
CancelGestureOnInvalidTargetproperty has been added that makes it possible to cancel the gesture immediately if ended on an invalid target.
EdgeCreatorcallback now has a
templateEdgeparameter where all data for edge creation can be retrieved from. The source and target
IPortparameters have been changed to
AssignBendsmethod has been removed and its functionality folded into the default
EdgeCreatorimplementation. This also means that customized
EdgeCreators now have to add bends to the created edge as well.
IsRemoveBendEvent. Instead, use the corresponding
...EventRecognizerproperties to customize the behavior.
AbstractContextMenuInputMode: Support for different context menu trigger events has been added. Currently only mouse (right-click) and keyboard (application / context menu key) are distinguished, more may be added in the future.
ValidClickHitCursorproperty has been added. This cursor is used when hovering over a valid hit region.
PreventNextDoubleClickmethod has been added that can be used in event handlers for single clicks to prevent that this click can become part of a double click event.
CancelEventRecognizerproperty has been removed.
Activeproperty has been removed. The mode can be manually deactivated using the
Armmethod now has a handle parameter for the handle that is under the mouse cursor.
GetDraggedNodemethod have been removed. The
DraggedItemproperty from its base class
ItemDropInputModeis used instead.
MultiplexingInputModeand can be customized more easily. Minor modes can be replaced and adjusted, as well as the list of available default command bindings can be modified.
OverviewInputMode: The new
Marginsproperty specifies margins for the visible area of the bound
GraphOverviewControl. The new protected method
UpdateVisibleAreaprovides further means for customizing the visible area.
MarqueeSelectionInputMode: The events
MarqueeSelectionEventArgsthat provide the current selection rectangle.
MarqueeSelectedevent has been removed. The
DragFinishedevent can be used instead.
LastModifierStateproperty has been removed.
MoveInputModenow provides a
QueryPositionHandlerevent that queries an
IPositionHandlereach time a drag is started.
MoveViewportInputMode: Mouse cursor handling is now also done by protected methods
Disarm, similar to other input modes.
CreateChildConcurrencyControllermethod have been removed.
TableEditorInputMode: The new events
LabelEditingallow fine-grained control over adding or editing labels and tie into the existing functionality provided by
TableEditorInputMode: The events
TableEditorInputMode: Now contains the
AllowMixedSelectionproperty which has been moved from the removed class
WaitInputMode.GetMultiplexingInputModehas been removed.
TextEditorInputMode: The events
TextEditorInputMode: The properties
LineBreakRecognizerhave been added which allow for easy customization of the key gestures used to add new line breaks and to cancel or stop the text editing.
IEditLabelHelperhas been refactored:
EditLabelhave been replaced by the methods
OnLabelEditingwhich take the new
LabelEditingEventArgsas their only argument.
IEditLabelHelper.ConfigureTextEditorInputModemethod has been removed. It has been replaced by the
IEditLabelHelperare the same as those from the
IEditLabelHelperis conceptually used as another event handler for those events.
EditLabelHelperhas been removed, along with the respective constructor. The label owner can usually be queried from the
LabelEditingEventArgs. Custom subclasses can of course still opt to store the item they were created for and use that field.
IEditLabelHelperimplementation is present in an
ILabeledItem's lookup, its
AddLabelmethod is called to determine whether a label may be added and provide a suitable label instance. Additionally, the predicate method
GraphEditorInputMode.ShouldLabelBeAddedalways has to return
true, whether edit helpers are present or not. If the new label should be edited interactively after it's creation (the default behavior), it also must be editable, following the rules above. Therefore an
IEditLabelHelperimplementation usually should allow editing of label instances that it has created itself in
snappingDisabledhas been added to the methods
DragFinished. This parameter has to be set to
trueto handle moves or finish a drag when snapping is temporarily disabled. This replaces the call to
CleanedUpas well as their associated methods now use
VoidInstancefield has been removed.
GetMovementInfoshas been changed to
IListEnumerable<MovementInfo>and the classes
EdgeEndMovementInfohave been removed.
AddEdgeEndToBeMovedhas been changed to the more general
MovementInfo. A boolean parameter
AtSourcehas been added.
AddSameHeightEntriesnow return an
IListEnumerable<RectD>containing the rectangles whose widths respectively heights are closest to the given size. The parameters
rectshave been removed.
CleanupSnappinghave been removed.
CollectSnapResultshas been changed to
SnapResultnow has more factory methods. The class
SnapLineSnapResulthas been replaced with a factory method as well.
InBetweenSnapLineContainerhave been removed.
GraphClipboard.ClipboardContextproperty has been removed.
GraphCopiernow have a new
offsetparameter that shifts nodes and bends by a given amount upon copying them.
IClipboardIdProvider.GetIdhas changed. The context parameter has been moved to the front.
KeyboardInputMode has been simplified along with all helper types and infrastructure around commands:
KeyboardInputModenow allows creating a mapping between a key gesture and a command as well as providing custom execution logic for a given command.
KeyboardInputModewhich removes all currently existing bindings for a given command.
LastEventLocationhave been removed from all input modes. Instead, the properties
CanvasControlcan be used.
EdgeEventArgsnow also contains the owner of the source and target port.
ItemClickedEventArgsnow also contains the location of the click.
StripeEventArgsnow also contains the
Tablefor this event.
OrthogonalEdgeEditingContext: The events
CleanedUpas well as associated methods now use
GraphCommands.AdjustGroupNodeSizenow always processes the nodes in bottom to top order instead of using the order in which the nodes were selected.
IBendSelectionTesternow take an
ICanvasContextas their context parameter.
IHandleimplementations no longer implement
IPositionHandler.SetPositionhas been removed. The interface is now used as a flagging interface only.
PointHandlehave been removed.
GraphEditorInputMode.NodeCreatornow has an additional parent parameter which can be used as the parent node for creating a new node.
GraphEditorInputModetries to find a group node at the click location to pass as parent to the
IPortCandidateProvider: The two method overloads
GetTargetPortCandidatesForEdgethat had an
IEdgeparameter have been removed - the two remaining pairs have been merged into a single method with an optional argument for the opposite candidate.
AbstractPortCandidateProvider.PortOwnerhas been removed, along with the methods that made use of it.
AbstractPortCandidateProvider: Overloads of
IPortan optionally an
IPortLocationModelhave been removed.
DefaultPortCandidate: A constructor overload taking the optional
PortCandidateValidityadditionally has been added.
movementInfoparameter's type has been changed to the more general
MovementInfo. A boolean parameter
atSourcehas been added.
PortRelocationHandle: The method
ConfigureDummyEdgehas been folded into
IReshapeHandler.HandleReshapeno longer has a return value.
GraphInputModeControllerhave been removed.
EdgeEndMoveHandlehas been removed.
StateMachineclass as well as the associated types and infrastructure have been removed from the API.
The XML namespaces have been updated and the mapping from yFiles WPF types to their corresponding XML namespace has been changed.
http://www.yworks.com/xml/yfiles-common/3.0. This includes the following types:
http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0. This includes the following types:
bool, etc., and enumeration types)
http://www.yworks.com/xml/yfiles-for-html/2.0/xaml. These are mainly the types in the following namespaces:
GraphMLWriter.Written, together with the corresponding event raiser methods.
ParseLabelSizeoptionally disables parsing of the preferred size of a label. This can be used to prevent unexpected clipping when parsing GraphML written on different machines, or with fonts that are not available.
DisableGraphSettingshave been merged to a single
DisableGraphSettingsproperty which is interpreted according to the context where it is set.
IndentOutputhas been added that allows to define whether the XML output should be properly indented.
DirectXmlWriterhave been merged into
ComplexMapperInputHandlerhave been merged into
ComplexMapperOutputHandlerhave been merged into
IDeserializerhas been removed. For custom deserialization an event handler for
GraphMLIOHandler.HandleDeserializationcan be used.
NullXmlWriterhave been removed.
IXamlNameMapperhas been refactored to and
AddXamlNamespaceMappinghas been added to
QueryOutputHandlersEventArgs: The overload of
AddOutputHandlertaking an object id has been removed.
XmlWriter: A property
indenthas been added that allow to define whether the XML output should be properly indented.
XmlWriter: The constructor overload taking an
InternalXmlWriteras well as the corresponding property
DelegateWriterhave been removed.
A lot of the utility types have been either replaced or removed.
yWorks.Modelnamespace has been removed and its types have been moved to more intuitive namespaces.
yWorks.Supportnamespace has been removed along with most of the types contained within, since they were not really needed. The remaining types have been moved to more meaningful namespaces, mainly
CollectionChangedEventArgshave been removed.
CompositePositionHandlerhave been removed.
IMapper.RemoveValuemethod has been removed. It depends on the specific implementation of the mapper whether a mapping can be removed. If an implementation provides a way to remove a mapping, that should be preferred over setting a
HashSethave been removed.
DefaultItemLookuphave been removed. Properties with the same names have been added to
ItemDecorator<TModelItem>class has been removed. Its members have been pushed down to its former sub-classes
ISelectionModelhave been merged into the
GeomSupport.CreateSmoothedPathmethod has been moved to
Stopnow stops a running layout calculation as soon as possible and then immediately shows the result so far, skipping any animation. In addition, the new method
Cancelimmediately cancels a running calculation and doesn't change the
Graphunless the animation was already running.
AbortHandlerhas been made read-only. There is a protected factory method
CreateAbortHandlerwhich can be overridden to create a custom
ConsiderViewportLimitercan be enabled to let the target viewport after a layout respect the
ViewportAnimationhas a new property
ConsiderViewportLimiterfor the same purpose.
LayoutGraphAdapternow have a property
AutomaticEdgeGroupingthat automatically configures edge groups for ports with multiple incoming or outgoing edges. This feature is enabled by default.
LayoutGraphAdapternow have a property
FixPortsthat automatically configures strong source and target port constraints for all edges in the graph. This feature is disabled by default.
LayoutExecutorno longer throws an exception wrapping a layout exception if no event handler of
LayoutFinishedhandled the event arguments. This means that exceptions in a layout algorithm can go by unnoticed if the layout runs asynchronously, and the task returned from
LayoutExecutor.Startis not awaited.
LayoutGraphAdapternow adds data providers that map each node, edge, and label of a
LayoutGraphto their corresponding
IModelItemin the original
IGraph. Especially, these data providers are available if a layout is run with a
LayoutExecutoror the convenience methods
HierarchicGroupLayouter, and the associated legacy interfaces
ILayerSequencer, together with their implementations, have been removed. Instead,
IncrementalHierarchicLayouterhas been renamed to
HierarchicLayoutand is now the only implementation of the hierarchic layout style. All associated interfaces and implementations from the namespace
yWorks.yFiles.Layout.Hierarchic.Incrementalhave been moved up to
DirectedOrthogonalLayouterhave been removed and their features have been incorporated into
OrthogonalEdgeRouterand all associated classes have been removed.
HVTreeLayouterclass has been removed and its features have been incorporated into
DefaultGraphLayoutclass has been removed.
ParentEdgeAugmentationStageclass has been removed.
Graph.MoveSubgraphmethod has been removed.
CopiedLayoutIGraphhas been removed. An instance of the base type
CopiedLayoutGraphwith the same functionality can be obtained from
CanLayoutmethod has been removed from all layout algorithms. Previously it pretty much always returned
|yFiles WPF 2.5||yFiles WPF 3.0|
|Major Layout Algorithms|
||removed; functionality incorporated into
||removed; functionality incorporated into
||removed; functionality incorporated into
||removed; functionality incorporated into
||removed; functionality incorporated into
|Changes in alphabetical order|