## GoXam for WPF version 3.0.8 Release Notes

Copyright © Northwoods Software Corporation 2008-2026

This kit includes assemblies, documentation, and samples for building interactive diagram applications using Microsoft's Windows Presentation Foundation on .NET Framework 4.6.2 and later and on .NET 6 or later. This installation is licensed under the terms of the software license agreement, LicenseAgreement.pdf and EvaluationAgreement.pdf

GoXam™ for WPF, also known as GoWPF, is designed to work in applications using Windows Presentation Foundation. Building GoWPF apps requires either the .NET 6 SDK or later on Windows, or the Microsoft .NET Framework 4.6.2 SDK or later.

The `net10.0` folder contains the DLL compiled for .NET 10.0, `net10.0/Northwoods.GoWPF.dll`, and sample applications using that DLL.

The `net48` folder contains the DLL compiled for .NET Framework 4.8, `net48/Northwoods.GoWPF.dll`, and sample applications using that DLL.

### Getting Started

- Run the sample apps built on .NET Framework and on .NET.
  For .NET:
  - `net10.0\GoWpfDemo.exe`, this demo framework holds most of the samples
  - `net10.0\GoWpfMinimal.exe`, a minimal app using GoWPF
  - `net10.0\GoWpfBasic.exe`, a simple app using a Palette and supporting user text-editing, linking, and grouping
  For .NET Framework:
  - `net48\GoWpfDemo.exe`, this demo framework holds most of the samples
  - `net48\GoWpfMinimal.exe`, a minimal app using GoWPF
  - `net48\GoWpfBasic.exe`, a simple app using a Palette and supporting user text-editing, linking, and grouping
  Or choose one of the directories with other framework targets.
- Read the GoXam Introduction, GoXamIntro.pdf in the `docs` folder, or online at GoXamIntro.pdf.
- Examine, build, and adapt the samples.
  For .NET:
  - `samples\GoWpfDemo\GoWpfDemonet10.0.csproj`
  - `samples\GoWpfMinimal\GoWpfMinimalnet10.0.csproj`
  - `samples\GoWpfBasic\GoWpfBasicnet10.0.csproj`
  For .NET Framework:
  - `samples\GoWpfDemo\GoWpfDemonet48.csproj`
  - `samples\GoWpfMinimal\GoWpfMinimalnet48.csproj`
  - `samples\GoWpfBasic\GoWpfBasicnet48.csproj`
  Or choose one of the projects with other framework targets.
- Read the GoXam API documentation online at: GoXam API.
- Search the GoXam Forum at: GoXam Forum.
- Purchase and install a development license by running the GoXam License Manager: `net46\GoXamLicenseManager.exe`

### Support

Northwoods Software provides e-mail support during the 30-day evaluation period. If you purchase the optional support subscription, you receive e-mail support for a year after purchase plus all new versions that are released during that period. For technical support, send e-mail to GoXam at our domain or send a message via https://www.nwoods.com/support/query.htm.

For general sales and licensing questions, send e-mail to GoSales@nwoods.com. Please make sure that you can receive e-mail from nwoods.com.

### Changes for v3.0.8

- Improved the Diagram.LicenseKey mechanism.

### Changes for v3.0.7

- Added support for .NET 10.

### Changes for v3.0.6

- Added support for .NET 8.

### Changes for v3.0.5

- Removed support for .NET Framework 4.0 and 4.5.
- Fixed a possible infinite loop in LayeredDigraphLayout.

### Changes for v3.0.4

- Removed support for .NET 5.0.
- Fixed optimization that caused a completely disconnected Link not to appear if only the bottom/right portion of the Link was visible in the viewport.
- Fixed some sequences of the copying of multiple links between the same two nodes not correctly copying their routing.

### Changes for v3.0.3

- Added support for .NET 6.0. Removed support for .NET Core 3.1.
- Fixed expanding groups/subgraphs respecting Group.WasSubGraphExpanded.
- Fixed the visibility of nodes added to an invisible group.

### Changes for v3.0.2

- Added support for .NET 5.0 at `net5.0/Northwoods.GoWPF.dll`. Removed support for .NET Core 3.0.
- Removed built-in support for copying data via binary serialization. https://aka.ms/binaryformatter

### Changes for v3.0.1

- Added support for .NET Core 3.1 at `netcoreapp3.1/Northwoods.GoWPF.dll`.

### Changes for v3.0

- Added DLL for .NET Core 3.0 at `netcoreapp3.0/Northwoods.GoWPF.dll`.
- Added DLL for .NET Framework 4.8 at `net48/Northwoods.GoWPF.dll`.
- The DragSelectingTool now CanStart() only when there has been DragSelectingTool.Delay milliseconds since the last mouse-down event. This allows the user to use the DragSelectingTool as well as the PanningTool -- the user just has to do a mouse-down, wait a short time (175 milliseconds is the default value for Delay), and then start dragging the DragSelectingTool.Box magenta selection rectangle. Now there is no need to set DragSelectingTool="{x:Null}" in order to support panning.
- Added the Diagram.FirstMouseEventArgs, Diagram.FirstMouseTimestamp, and Diagram.LastMouseTimestamp properties
- Fixed link point calculations for "...Side" Spots when the Node.RotationAngle is not zero
- Fixed ResizingTool.DoResize to better maintain location of Node when rotated
- Improved Diagram.PartManager property setter to rebuild all Nodes and Links
- Improved Diagram.LayoutManager property setter to perform a new layout
- Improved Diagram.CommandHandler property setter to update all commands
- Added four Arrowheads: BackwardFork, BackwardLineFork, BackwardCircleLine, and BackwardStandard

### Changes since v2.2.0

- Added the Diagram.IsAnimating and the LayoutManager.AnimationDisablesDiagram dependency properties
- Fixed improper measurement of Links with more than one LinkShape
- Added the protected virtual method DraggingTool.ComputeFocusPoint, to allow customization of the mouse point in the newly copied nodes being dragged in an external drag-and-drop
- Fixed removing old Overview.Box instances when an Overview and its observed Diagram are removed and then reinserted into the app's visual tree
- Fixed round-off errors in GridLayout positioning of nodes when GridLayout.Alignment is Location
- Fixed a null reference error when reparenting Groups
- Fixed some cases of Links not updating after modifying their bound data properties
- UndoManager.Clear now updates commands in all Diagrams that use DiagramModels that use that UndoManager
- Fixed geometry of orthogonal Bezier Links with a non-zero ToShortLength
- Improved DiagramPanel.ZoomToFit to not show scrollbars in certain situations
- Fixed CommandHandler.Delete not deleting all nodes in Diagram.SelectedParts, depending on the order in which the nodes and their connected links were selected
- CommandHandler.Paste now calls CommandHandler.PasteFromClipboard within the transaction, not before it
- Fixed a case of heeding link validity checking when dragging a Link
- Fixed maintaining link routes when drag-copying nodes and links
- Fixed a case of not saving moved link routes via the PartManager, if link routes could be undone/redone
- Fixed scrolling when zoomed in at scales such as 100x

### Changes since v2.1.1

Parts

- Fixed unintentional invalidation of link Routes during undo
- Improved link routing when Route.Adjusting is LinkAdjusting.End
- Fixed visibility of links connecting with non-visible offscreen member nodes when collapsing a Group that remains onscreen
- Fixed Part.GetElementBounds for Links to include link labels, to improve DiagramPanel.ComputeDiagramBounds
- Fixed some cases of handles in Adornments being clipped
- Fixed visibility of Links connecting Groups to nested member Nodes after collapsing nested Group
- Improved link jump-overs and jump-gaps not to do so when both links connect to the same port in either direction
- Fixed changes of SpotPanel attached properties to invalidate the arrangement of ContentPresenters in SpotPanels
- Fixed some code that was assuming that all graphical DependencyObjects were Visuals -- now it supports use of Media3D.Visual3D objects

Controls

- Improved updating for data bound properties of the Diagram.GridPattern object

Layouts

- Fixed CircularLayout when operating on a single node/vertex and improved some results when laying out 3 or 4 nodes/vertexes
- Fixed some cases of layout routing of links being lost when connecting with groups

Tools, Commands

- The LinkReshapingTool when dragging and end reshape handle now updates the end point of the link route so that the link appears to be pointing to the center of the port
- Fixed the DraggingTool not to leave behind the temporary CopiedParts after a control-drag-and-drop if the Parts cannot be deleted

### Changes since v2.0.2

Samples

- Added Genogram sample, for showing family trees with attributes/markers on each person
- Added Serpentine sample, showing a custom layout
- Added Swim Lanes sample, showing one way to use Groups as "lanes"
- Added Sequence Diagram sample

Parts

- Improved some cases of Link JumpOvers or JumpGaps not jumping over zero-length segments
- Fixed Node.FindPort after a non-Part.VisualElement has changed its Node.PortId from the empty string to null or vice-versa
- Improved routing of AvoidsNodes Links within Groups
- Improved AvoidsNodes routing not to compute special route when default orthogonal routing does not cross over any nodes
- Ports can now be found inside Visuals that are not FrameworkElements

Controls

- Fixed the drawing of the Diagram.Background over the whole area of the bitmap produced by DiagramPanel.MakeBitmap

Layouts

- Added TreeLayout.RootVertexes property, to enable specifying roots without referring to their Nodes
- Added TreePath.Default enumeration. As the value of TreeLayout.Path, the layout uses the Diagram.TreePath to decide whether edges go from the parent to the children or vice-versa.
- Fixed a TreeLayout exception when routing edges with dummy vertexes
- Fixed TreeLayout ignoring some TreeVertexes that are in cycles

Tools, Commands

- Added DraggingTool.IsRealtime; when set to false, a drag inside a diagram shows a representation of the dragged parts instead of moving the dragged parts. You can customize what is shown by overriding the DraggingTool.MakeDragImage virtual method.
- Added CommandHandler.ZoomFactor, to more easily control the percentage at which the IncreaseZoom and DecreaseZoom change the Diagram's scale.
- Added CommandHandler.ZoomToFit command and corresponding methods, invoked by Alt-Z. Invoke twice in a row to restore the original viewport.
- Made LinkingBaseTool.FindTargetPort smarter about small values for PortGravity, and treat zero specially.

### Changes since v2.0.1

Samples

- Improved the Virtualizing sample to make the VirtualizingTreeLayout more generally usable

Parts

- Route.MidAngle has been improved to not consider segments shorter than one unit if that is where the midpoint is -- instead it uses the average angle of the adjacent segments
- Fixed cases of Link JumpOvers or JumpGaps being incorrect when scrolled in from offscreen

Controls

- External drags now autoscroll, just as internal drags do

> Layouts

- Fixed LayeredDigraphLayout routing of Bezier Links connecting to visible Nodes inside nested Groups