RichCanvas 3.0.0
See the version list below for details.
dotnet add package RichCanvas --version 3.0.0
NuGet\Install-Package RichCanvas -Version 3.0.0
<PackageReference Include="RichCanvas" Version="3.0.0" />
<PackageVersion Include="RichCanvas" Version="3.0.0" />
<PackageReference Include="RichCanvas" />
paket add RichCanvas --version 3.0.0
#r "nuget: RichCanvas, 3.0.0"
#:package RichCanvas@3.0.0
#addin nuget:?package=RichCanvas&version=3.0.0
#tool nuget:?package=RichCanvas&version=3.0.0
🎉 RichCanvas v.3.0.0 Released!
Check out the new features & breaking changes in the [release notes].
<div align="center"> <img width="524" height="310" alt="RichCanvas" src="https://github.com/user-attachments/assets/584ae1fa-cefe-42ec-8129-86f93187a6ff" /> <h4 align="center">Enhanced WPF Canvas with panning, zooming, scrolling and other customizable functions, designed for MVVM.</h4>
📥 Installation
Use the nuget package manager to install RichCanvas.
Install-Package RichCanvas
✨ Features
- Supports adding items directly through ItemsSource collection binding
- Offers drawing mechanism for items added to ItemsSource
- Out of the box zooming, panning, auto-panning, infinite scrolling and other functionalities
- Dragging and selection for items
- Items come with location and size dependency properties (no attached properties)
- Lots of configurable dependency properties
- Ready to support custom actions and functionalities
- Optimized for interactions with hundreds of elements
- No dependencies other than WPF
- Designed for MVVM
💻 Demo
The old DEMO has been deprecated as of v.3.0.0. You can still find the code for that on v2.4.2 branch.
Until a new demo application will be available based on v.3.0.0 and future releases, you can have a look at
to get a grasp of the new changes and features added with v.3.0.0.
📝 Documentation
API Reference can be found here.
For documentation please refer to Wiki.
❤ Contributing
Feel free to help with documentation, bug reports, pull requests or new/missing features ideas.
Check out the Contributing page for details.
🙏 Special Thanks
Just a special mention for my friend @miroiu who's been inspiring me and this project from day zero.
Check out his work @nodify.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net5.0-windows7.0 is compatible. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net6.0-windows7.0 is compatible. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net8.0-windows7.0 is compatible. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net9.0-windows7.0 is compatible. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp3.1 is compatible. |
.NET Framework | net472 is compatible. net48 is compatible. net481 was computed. |
-
.NETCoreApp 3.1
- Newtonsoft.Json (>= 13.0.3)
-
.NETFramework 4.7.2
- Newtonsoft.Json (>= 13.0.3)
-
.NETFramework 4.8
- Newtonsoft.Json (>= 13.0.3)
-
net5.0-windows7.0
- Newtonsoft.Json (>= 13.0.3)
-
net6.0-windows7.0
- Newtonsoft.Json (>= 13.0.3)
-
net8.0-windows7.0
- Newtonsoft.Json (>= 13.0.3)
-
net9.0-windows7.0
- Newtonsoft.Json (>= 13.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
------------ RichCanvas v3.0.0 ------------
- Breaking Changes:
- Renamed RichItemsControl to RichCanvas
- Renamed RichItemContainer to RichCanvasContainer
- Renamed RichCanvas to RichCanvasPanel
- Removed PanningGrid (scrolling is now handled inside main control class and needs to be wrapped in a ScrollViewer)
- Removed RichCanvas.HorizontalScrollBarVisibility dependency property
- Removed RichCanvas.VerticalScrollBarVisibility dependency property
- Removed RichCanvas.SelectionEnabled dependency property
- Removed RichCanvas.EnableNegativeScrolling dependency property
- Removed RichCanvas.ExtentSize dependency property
- Removed RichCanvas.PanningKey dependency property
- Removed RichCanvas.ZoomKey dependency property
- Removed RichCanvas.DisableScroll dependency property
- Removed RichCanvas.GridStyle dependency property
- Removed RichCanvas.TranslateOffset dependency property
- Removed Scrolling routed event
- Renamed Scale dependency property to ViewportZoom
- Replaced ViewportRect to ViewportSize dependency property
- Features:
- All default operations of RichCanvas work now based on states classes derived from CanvasState class
- Interactions between them and input gestures are defined through a state obtained from method RichCanvas.GetDefaultState()
- Inheriting RichCanvas and overriding this method will let you define your own states and orchestration of them
- Default states:
- DefaultState
- DrawingState
- MultipleSelectionState
- SingleSelectionState
- PanningState
- All default operations of RichCanvasContainer work now based on states classes derived from ContainerState class
- Interactions between them and input gestures are defined through a state obtained from method RichCanvasContainer.GetDefaultState()
- Inheriting RichCanvasContainer and overriding this method will let you define your own states and orchestration of them
- Default states:
- ContainerDefaultState
- DraggingContainerState
- Added configurable input gestures for RichCanvas and RichCanvasContainer default offerd operations (through states) to RichCanvasGestures
- Added CurrentState, PushState and PopState to RichCanvas and RichCanvasContainer
- Added MultiGesture utlity for combining multiple input gestures into one gesture
- Added MouseKeyGesture utility for combining a MouseGesture with a Key[] or KeyGesture[] into one gesture
- Added UI Automation framework AutomationPeer classes for RichCanvas and RichCanvasContainer for discoverability when using UI Automation tools based on UIA framework from Microsoft
- Added RichCanvasContainer.AllowScaleChangeToUpdatePosition dependency property to control the position update when scaling is changed.
- Changed IsPanning property on RichCanvas from internal to public
- Added RichCanvas.DrawingEndedCommand dependency property invoked after an item has been drawn
- Added RichCanvas.ViewportLocation depenedency property to get or set the viewport's top-left coordinates in graph space coordinates
- Added RichCanvas.ItemsExtent dependency property to get the area covered by the RichCanvasContainers present on RichCanvas
- Bugfixes:
- Items added to the ItemsSource that are valid for drawing are now handled in the correct order and reacting to any changes like removing or moving