Knowledge: Tech Blog

Where we share our thoughts on technology and design.


Nick Soper

Hosting .NET Core on Linux with Docker - A Noob's guide

This blog describes my experience of upgrading a basic RESTful API from .NET Core RC1 to .NET Core 1.0, and using Docker to host it on Linux. Docker is completely new to me so I'll give my thoughts as a noob.

Nick Soper

ASP.NET 5 to ASP.NET Core 1.0

Literally a couple of hours after we released the previous post on writing a RESTful API with ASP.NET 5, I learned that Microsoft have renamed the new platform. This is a very short summary of that decision.

Nick Soper

Building a RESTful API with ASP.NET 5

This blog describes my first experience of writing a RESTful API with Microsoft's new MVC 6 framework which is due to be released as part of ASP.NET 5 in early 2016.

Thomas Kelly

Generalizing OData

OData Controllers offer an easy interface between data and your application, but require one controller per model type. These controllers often have a large amount of almost identical code. In this blog post, we look at using C# Generics to remove this duplication.

Ian Sullivan

What Makes a Good CMS?

Code quality is important in large systems and web sites are no exception. This post shows how Umbraco enables developers to write clean and maintainable code.

Effrosyni Kouri

Introduction to ASP.NET 5

This blog post discusses the changes to the .NET framework, the solution layout / configuration and serves as an introduction to the recommended programming style encouraged by Microsoft going forwards.

Andy Lee

Asp.Net bundling of Angular templates

How to use Asp.Net's built-in bundling and optimisation feature to optimise AngularJS templates

Nicholas Wolverson

Snooping WPF: Tips and PowerShell tricks

When moving back from web to desktop development, it’s easy to miss the quick feedback and update cycle enabled by the developer tools in modern web browsers. To an extent the debugger intermediate window does many of the things the console allows, and many of the “script debugging” features the...

Nicholas Wolverson

Interactive.NET (2 - C#)

In the previous part of this series discussing running an interactive environment (REPL) on .NET I covered the non-C# options. This post explores the options for an interactive or lightweight C# environment.

Nicholas Wolverson

Interactive.NET (1)

In the first part of a series on running an interactive environment (REPL) on .NET, I talk a little about why you might want one, and cover the non-C# options.

Rolf Baxter

PDF Generation and Printing in .NET

In this post I'm going to talk about creating PDF documents in C#. I will primarily focus on the PdfSharp and MigraDoc libraries, which are free C# libraries available from I recently became acquainted with them while investigating .NET exporting functionality and wanted to blog about my experience and...

Colin Eberhardt

Book Review: iOS Programming for .NET Developers

A couple of weeks ago Josh Smith published his latest book, "iOS Programming for .NET Developers", which seeks to ease the transition from .NET to iOS developers. As someone who has many years of .NET experience, and more recently a desire to develop for 'the other side', I thought this...

Rolf Baxter

Developing an extended Drag And Drop TreeView control in C# .Net

This blog post talks about developing an extended Drag and Drop TreeView control in C#. I say extended because the .Net framework already provides simple drag and drop functionality, but the visual feedback during the drag operation is somewhat lacking. I found a number of TreeView extensions on CodeProject, some...

Nicholas Wolverson

Mapping in WPF, Silverlight and WP7

In this article I show a simple example of integrating Bing and Google mapping into in WPF, Silverlight, and Windows Phone applications. I was inspired to investigate how easy it is to get up and running with maps on these platforms when I saw how similar the Bing APIs are...

Colin Eberhardt

WPF Charting Performance Comparisons (the Battle Continues)

This blog post presents a thorough analysis of the performance of various WPF Charting components. The results show that a new class of charting solutions, which use raster-based graphics as opposed to retained mode vector graphics, provide a considerable performance advantage

Colin Eberhardt

Everything you wanted to know about databinding in WPF, Silverlight and WP7 (Part Two)

Introduction This is the second post in my series about databinding in Silverlight and WPF. In the first post I looked at how you wire-up UI controls to a model in the absence of a databinding framework. I showed how databindings can be created in code-behind, removing the need for...

Colin Eberhardt

Everything you wanted to know about databinding in WPF, Silverlight and WP7 (Part One)

OK, so the title is a little ambitious, but there is nothing wrong with setting yourself lofty aims! Because of the depth of this topic I have decided to split this tutorial up into a series of blog posts, each of which explore a different aspect of the binding framework....

Colin Eberhardt

A Simple Pattern for Creating Re-useable UserControls in WPF / Silverlight

This blog post provides step-by-step instructions for creating a user control, which exposes bindable properties, in WPF and Silverlight. The post covers dependency properties, and how to manage DataContext inheritance. When building user interfaces you will often find yourself repeating the same UI patterns across your application. After all, users...

Colin Eberhardt

XAML Finance - a cross-platform WPF, Silverlight, WP7 application

I have just published a new article on codeproject which describes the development of XAMLFinance, a cross-platform application for the desktop (WPF), web (Silverlight) and phone (WP7). Head over to codeproject to read about the development of this application and download the sourcecode. Regards, Colin E.

Colin Eberhardt

Automatically Showing ToolTips on a Trimmed TextBlock (Silverlight + WPF)

Both WPF and Silverlight have a property TextTrimming="WordEllipsis", which trims the text that a TextBlock displays based on the available width. This blog post describes a simple method for automatically showing the full text as a tooltip whenever the text is trimmed. This is presented as an attached behaviour and...

Colin Eberhardt

A Simplified Grid Markup for Silverlight and WPF

The WPF / Silverlight syntax is long and cumbersome. This blog post describe a simple attached property that allows you to specify row and column widths / heights as a simple comma separated list, e.g. RowDefinitions="Auto,,3*,,,,2*" The Grid is probably one of the most useful and versatile layouts that Silverlight...

Jonathan Cardy

Introduction to Parallelism in .NET 4.0

Back in the day, processors had a single core and clock speeds increased steadily every year. This meant that although writing multi-threaded code for a single CPU gave some performance improvements (since single-core CPUs usually try to execute multiple threads), it was hardly the top of any developer's list of...

Colin Eberhardt

White Paper: Silverlight, WPF and Windows Phone 7 cross platform development

Last week I gave a presentation at a joint Scott Logic / Microsoft event about how WPF and Silverlight are unifying the development platform for desktop, web and mobile. To accompany the talk I wrote a white paper which delves into this subject in a little more detail. You can...

Colin Eberhardt

Templates, or Why I love WPF (and Silverlight Too!)

This post compares the implementation of a simple ListBox layout with Windows Forms and Windows Presentation Foundation. The use of Templates within WPF are a clear winner over the WinForms 'owner draw' route. Application user interfaces are becoming much more graphical, with users expecting a more engaging and 'lively' experience....

Colin Eberhardt

A Universal Value Converter for WPF

This post provides a simple IValueConverter implementation that makes use of the framework type converters in order to convert between a large range of source / target types. This converter can be used both within bindings and in code-behind to give more concise property setters. Introduction One of the great...

Colin Eberhardt

Modal dialogs in cross-platform WPF/Silverlight applications

This blog post looks at the problem of showing modal dialog windows in applications that target both the Silverlight and WPF platforms. A solution is provided which allows modal dialogs to be written that work well for both technologies. Silverlight is, roughly speaking, a subset of Windows Presentation Foundation (WPF)....

Colin Eberhardt

Silverlight 3 UK launch ... and the future of WPF?

A brief article on the launch of Silverlight 3 and why the interest in Silverlight is eclipsing that of WPF. The excitement behind Silverlight has been gaining in momentum throughout this year, with one of the highpoints being the MIX09 conference in March this year where the announcement of Silverlight...

Colin Eberhardt

New codeproject article on WPF, Silverlight + T4 Templates

I have just finished a new article on CodeProject - Generate WPF and Silverlight Dependency Properties using T4 Templates

Colin Eberhardt

Using CSS Selectors for Styling in WPF

When I first encountered WPF I was really impressed by its styling and templating features which are more powerful than anything else I had previously seen for desktop software development. The property-value pairing within styles instantly reminded me of CSS, however the WPF styles lack the most powerful feature of...

Colin Eberhardt

WPF DataGrid - Committing changes cell-by-cell

In my recent codeproject article on the DataGrid I described a number of techniques for handling the updates to DataTables which are bound to the grid. These examples all worked on the assumption that you want to keep your database synchronised with the DataGrid, with changes being committed on a...

Colin Eberhardt

WPF DataGrid - detecting the column, cell and row that has been clicked

The WPF DataGrid is a very flexible tool, however in its current state certain simple tasks can prove to be rather tricky. A fairly common task when working with DataGrid is detecting which row, or cell a user has clicked on, or whether they clicked a column header. You might...