You could try and use a Grid
or a DockPanel
and then use Line
or Rectangle
to create 4 filled distinct regions. However, you can't use a RadialGradient in this case because it will stretch, and look wrong. So instead you could create 4 different LinearGradients which were setup to graduate in the 4 different directions you want.....however, I don't think this would look right either in the corners...as they need to be mitred...and this won't do that.
So...
...you could try and use this GradientPath
control that knows how to draw a gradient along a path.
Note, I haven't been able to spend much time with it so I haven't worked out how to use it properly - the start and end caps of the rectangle aren't quite right.
Note using a PathGeometry instead of RectangleGeometry still has the same problem.
One possible workaround is to create 2 rectangles with GradientPath and then cut them through the diagonal (using a suitable Clip definition) so that they each contribute the good part of the rectangle (i.e. without the start/end artifact)...and overlay them in a Grid.
Or you could dig into the GradientPath code.
It should give you some ideas if you want to take this approach....and play around/experiment at your leisure till it is how you want it.
<gpl:GradientPath Name="gradientPath2"
StrokeThickness="30"
>
<gpl:GradientPath.Data>
<RectangleGeometry Rect="0,0,200,200" />
</gpl:GradientPath.Data>
<gpl:GradientPath.GradientStops>
<GradientStop Offset="0" Color="Blue" />
<GradientStop Offset="0.5" Color="Red" />
<GradientStop Offset="1" Color="Green" />
</gpl:GradientPath.GradientStops>
</gpl:GradientPath>
