protected void RenderContextMenu() { // What we need to do first is get the maxed size text... int x = 0; int ii = -1; this.Content.Empty(); for (int i = 0; i < ContextItems.Count; i++) { int y = ContextItems[i].Caption.Length; if (y > x) { x = y; ii = i; } } if (ii == -1) { return; } int calwidth = (int)GetTextWidth(ContextItems[ii].Caption, Settings.DefaultFont); if (calwidth < Settings.ContextMenuMinWidth) { calwidth = Settings.ContextMenuMinWidth; } int width = (calwidth + 34 + 8 + 2); int top = 1; for (int i = 0; i < ContextItems.Count; i++) { var contextItem = ContextItems[i]; int y = contextItem.Caption.Length; var item = Label(contextItem.Caption, 1, top, width - 2, false, false, "contextitem"); item.tabIndex = -1; contextItem.Span = item; item.onblur = (ev) => { if (!SpanExist(ev.relatedTarget.As <HTMLElement>())) { MainContextMenu.Close(); } }; if (contextItem.Dropdown) { var div = new HTMLDivElement(); div.className = "control"; div.SetLocation("(100% - 20px)", 2); div.SetSize(20, 20); div.innerHTML = ">"; div.style.textShadow = "rgba(64, 64, 64, 0.25) 0 1px 1px"; //text-shadow:#000 0 1px 1px,#000 0 -1px 1px div.style.fontWeight = "bold"; div.style.textIndent = "0"; // font-weight: bold; //text-indent: 0; item.appendChild(div); // border: solid black; //border-width: 0 3px 3px 0; //display: inline-block; //padding: 3px; } item.onclick = (ev) => { if (contextItem.Enabled) { if (contextItem.OnItemClick != null) { contextItem.OnItemClick(contextItem); } if (!contextItem.CloseHandled) { this.Close(); } } }; item.onmouseenter = (ev) => { if (contextItem.OnMouseEnter != null) { contextItem.OnMouseEnter(contextItem); } }; Content.AppendChild(item); top += 24; if (ContextItems[i].BeginGroup && i != ContextItems.Count) { top += 1; var sep = Div("contextitemseperator"); sep.style.top = top.ToPx(); sep.style.width = calwidth.ToPx(); Content.AppendChild(sep); top += 2; } } top++; this.Content.SetSize(width, top); }