Very nice!
One suggestion: you can use Viewbox element which automatically scales its content so you don't have to handle the scaling yourself.

So the XAML code will look something like that:
<Viewbox Stretch="Uniform">
    <Canvas x:Name="canvas">
...