This seems like it should be utterly trivial, it's just two paths each of which includes two lines and two arcs. I haven't actually done it in WPF, since I mostly work in WinForms, but assuming you can paint a custom control it is nothing more than (half way to pseudocode)
protected override void OnPaint(Graphics g){
float cx = Width / 2, r = cx * 0.95f, cy = Height - 10, rinner = r * 0.6f;
GraphicsPath unfilledGuage = new GraphicsPath();
unfilledGuage.AddArc(cx - r, cy - r, r * 2, r * 2, -180, 180);
unfilledGuage.AddArc(cx - rinner, cy - rinner, rinner * 2, rinner * 2, 0, -180);
unfilledGuage.CloseFigure();
g.FillPath(unfilledBrush, unfilledGuage);
float angle = 180 * (Value / Max);
GraphicsPath filledGuage = new GraphicsPath();
filledGuage.AddArc(cx - r, cy - r, r * 2, r * 2, -180, angle);
filledGuage.AddArc(cx - rinner, cy - rinner, rinner * 2, rinner * 2, -(180 - angle), -angle);
filledGuage.CloseFigure();
g.FillPath(filledBrush, filledGuage);
}