I have a bunch of XBL widgets that works as a "wrapper" for content I want repeated in a <template/>. To do this I insert the child elements under the wrapper-widget and use code in <xbl:constructor/> to remove, mangle and massage the children into the complete widget. Maybe you could do something similar, i.e. put the <textbox/> inside a binding and use the constructor "opportunity" (to execute code before rendering) to poke inside the textbox and add whatever stuff you need to the context menu.
Your problem is probably a bug in the <textbox/> widget though, while my cases are mostly hacks to accomplish "special" functionality.
Example:
<drichlistbox
id = "pubList"
formElement = "true"
tabname = "pubepisode"
query = "SELECT p.episodeID,DATE_FORMAT(p.start,'%e %b, %Y') as start,DATE_FORMAT(p.end,'%e %b, %Y') as end,c.title FROM pubepisode as p,channel as c WHERE p.newsitemID=dbrecord AND p.channelID=c.channelID ORDER BY p.end DESC"
idCol = "episodeID"
maxheight = "110"
minwidth = "300"
flex = "1"
attendvalue = "true" >
<description value="rdf:http://www.iperbole.bologna.it/rdf/pubepisode#title (rdf:http://www.iperbole.bologna.it/rdf/pubepisode#start - rdf:http://www.iperbole.bologna.it/rdf/pubepisode#end^)"
id="start"
dbcolumn="start"
flex="1"
/>
<button label="just a button"/>
</drichlistbox>