Discovering open source WPF components – Orc.Controls

In the discovering open source WPF components series, I will look into useful open source components that can be used to create WPF apps. This weeks component is Orc.Controls.

Controls are an important part of WPF applications. Although Microsoft provides lots of controls out of the box, a few were missing or not working as an end-user might expect. The Orc.Controls component tries to fill that gap by providing very useful controls that will automatically adapt styling based on accent colors.

The controls listed below isn’t the complete list of controls provided by the component. It does give you a good idea about the look and feel of the controls though.


It’s so simple, but WPF does not provide this out of the box. Use the AnimatedGif control to easily add animated gifs to an application.



Sometimes you need to show a legend that represents a list of values, where each value represents a color. This might become quite a complex control when you have to write it yourself, but the team of Orc.Controls has written this for you so you can immediately start using it.



A color picker is something that exists in Windows, but not in WPF. Thanks to Orc.Controls, you can let the user pick any color.



The WPF date picker isn’t the best looking date picker you can imagine. I think the one below looks much better!



Picking a TimeSpan is something that lots of apps need, but there are no decent controls available. The TimeSpanPicker inside Orc.Controls does an excellent job at filling up that gap.



The DateTimePicker combines the power of the Date and TimeSpan pickers as you can see in the animated gif below:



Tool tips are extremely useful. Imagine a user that wants to compare multiple tool tips, then they are not as handy as we might think. Allowing users to pin tool tips gives them the option to compare the tooltips and place them where the end-users wants them to be visible.


Fix ReadyNAS frontview broken or “no logs exist” without losing data

Note that this will void your warranty, but my machine was out of warranty anyway. Don’t come to me in tears afterwards…

Since I use this device for work, I needed a quick fix so decided to purchase Netgear support for EUR 75. After 1 hour of chatting with a level 1 support desk person, 1 hour of calling with a level 2 support desk person, they put me in the queue for a level 3 that would actually solve the problem (asap). After waiting for about 3 hours and leaving the firewall to my NAS open (this was business critical), I decided to take faith into my own hands and fix it myself (with the help of a lot of blog posts). I will put it all together here and save you 2 hours and EUR 75 of support.

The Symptoms

Let me start with the fact that I have enjoyed my ReadyNAS NVX for years and am (or was) a very happy user. Until today, when it became unreliable. It started with my shares not being available to my Windows machines. After logging in into the admin interface I found out that nothing was working as expected:

  • The CIFS (SMB) services were not checked (but I didn’t change anything)
  • The services were unchecked (not running)
  • When going to the logs file, it says “no logs exist”

After searching for a long time, I found the original issue here:

Basically it means that the OS partition is full and cannot handle any more requests.

If you are here, do not restart the device or re-install the OS, you will loose your SSH access. If you already restarted and did lose your SSH access, continue reading…

The Cause

The cause (at my side) was a buggy Crashplan installation spamming the upgrade directories. This caused an upgrade directory of 3.5 GB (of the 4 GB that the actual OS system has). I thought that rebooting the device was a possible fix, so did that. After that, I lost root access (since the service could no longer be started because there was no disk space). Now I was locked out.

The Solution

Depending on whether you still have SSH access to the machine, the fix can be simple or hard. If you still have access, you can directly move to the “cleaning up” part.

Restoring SSH access / using telnet to connect to the machine

Disclaimer: this is the point where you might break everything so please use this with care. I did write this blog post afterwards, so I might have missed some steps.

To regain access to your NAS after losing SSH, see this blog post. Make sure to mount your disks as well (step 5). Then you can continue with the cleaning up.

Cleaning up

Now you have access to your machine, you can finally start cleaning it up. To find the culprit (in my case it was Crashplan), but you should check what directory is causing the issue on your machine.

1. Check if the disk is fully full by using the following command (it probably says that a 4GB partition is fully using 4GB)

2. Remove (or backup) the files, in my case the files were located in this folder (3.5 GB):

(which actually points to /usr/share/crashplan/upgrade if you are not using telnet to log into the machine)

3. Now the NAS has disk space again on the OS partition, you can reboot your NAS and it should all slowly start working again.

Post steps

1. If you lost your SSH, don’t forget to reinstall the “EnableRootSSH_1.0-x86” plugin

2. Enable the CIFS service again

3. Enable installed addons that are now disabled

4. Double check all your settings

Discovering open source WPF components – Orc.CommandLine

In the discovering open source WPF components series, I will look into useful open source components that can be used to create WPF apps. This weeks component is Orc.CommandLine.

Using a command line, even in WPF, is very important. For example, it allows you to automatically let an app open a directory or file at startup. However, manually parsing the command line is a quick and dirty solution which will not work on the long run (when adding more features / options).

The Orc.CommandLine library provides the following features:

  • Parse arguments based on a context class
  • Automatically provide help to the end-users

The switches can be provided by either ‘-’ or ‘/’. Below are a few examples:

  • -b
  • -string
  • /b
  • /string

An option definition has a short and long name. Both can be used as a switch.

Creating a context class

The context class is a very convenient way to define available command line arguments inside a class. Below is an example of a context class:

Providing help to end-users

Because all the information is known in the context class, you can write help to the console very easily by using the following code:

A complete example

This will successfully parse a command line like this: