Year: 2010

By default, ZoomableCanvas works by coercing its RenderTransform to be a combination of a ScaleTransform and a TranslateTransform representing the current Scale and Offset, respectively. This is the most performant mode in WPF, and makes your UIElements scale up and down for free, but sometimes you can get better effects without the transform. If you…

The original sample for Chris Lovett’s VirtualCanvas showed a random set of shapes on a canvas. You could use a menu to choose whether to have 5, 500, 12500, or 50000 shapes “on the canvas”. I use quotation marks because the point of the sample was to show that with UI virtualization you could have…

For the first entry in the series of examples using the ZoomableCanvas, I’ll start off with just the basics: Scale and Offset. I’ll start by creating a brand new app, renaming it from WpfApplication1 to ZoomableApplication1, and adding a reference to a class library that I created after downloading the ZoomableCanvas source code and its…

ZoomableCanvas is the Panel that displays almost all of the elements in Code Canvas. Code Canvas is actually made up of several layers of ZoomableCanvases that are stacked on top of each other, and they are synchronized by simply sharing the same values for Scale and Offset. Scale and Offset are the driving forces behind…

When I started writing Code Canvas back in 2008, I quickly realized that using a simple ScaleTransform on an existing Canvas would not produce the experience that I wanted. This was mostly because the elements on my canvas have many fine details such as the dog-ears on files, the icons next to identifiers, and the…

Code Canvas is being shown by Rob DeLine at the 32nd International Conference on Software Engineering this week, in Cape Town, South Africa. The demonstration will show Code Canvas being hosted inside Visual Studio 2010, along with a new visual style and some additional features. The new style focuses on source code fragments and visual…

The generic collections in the .NET framework do a good job of hiding algorithmic details and instead let you focus on the purpose of a class instead of how it’s implemented. For example, instead of using a Hashtable you use a Dictionary. And instead of using an Array you use a List. A Dictionary might…