User-1513591455 posted
One very simple way (and sometimes one I use for checkboxes in read-only grids) is to have three images, one for each state. Clicking the image simply changes to the next state. You could wrap all of this up into a custom control.
Clearly, the use of images reduces the amount of styling. You could implement a box with a text based "tick" in it also to get more styling attributes such as box/tick size, colour, etc.