Once again, I couldn't find a built in control that provided what I wanted for property editing, so I've implemented the above property grid manually.
I'm drawing the lines and text with GDI+ methods, then moving a borderless TextBox over the selected value. When the selection changes, the relevant property is validated and updated. Works really well.
The PropertyForm actually owns a list of MapItemProperties, which can have either a Number or Text type. The idea is that the same form can be used to edit the properties of different sorts of items.
I just add values to the PropertyForm's List
In theory, I should even be able to select multiple items (once they are implemented) and have the property form show the common items for all of them.
Pretty cool really. I must learn how to turn these into reusable components at some point.