void HandleCheckBoxAction(object sender, RibbonEventArgs e) { var methodName = e.Control.Tag + "_Click"; Tracer.WriteTraceMethodLine(DELEGATE_TO_VIEW, methodName); var flags = BindingFlags.Instance | BindingFlags.NonPublic; var mi = RibbonView.GetType().GetMethod(methodName, flags); if (mi != null) { var checkBoxAction = (Action <object, RibbonEventArgs>) Delegate.CreateDelegate( typeof(Action <object, RibbonEventArgs>), RibbonView, mi); checkBoxAction(sender, e); switch (e.Control.Tag) { case "PageTitle": RibbonView.PageTitleControls.ForEach (item => RibbonUI.InvalidateControl(item.ToString())); break; case "RuleLinesSpacing": RibbonView.RuleLinesSpacingControls.ForEach (item => RibbonUI.InvalidateControl(item.ToString())); RibbonUI.InvalidateControl("No_Ruled_Lines"); break; } } else { Tracer.WriteErrorLine("Method '{0}' not found", methodName); } }
TResult DelegateToView <TResult>( Office.IRibbonControl control, string methodName) { var result = default(TResult); var flags = BindingFlags.Instance | BindingFlags.NonPublic; var mi = RibbonView.GetType().GetMethod(methodName, flags); if (mi != null) { var viewFunc = (Func <Office.IRibbonControl, TResult>) Delegate.CreateDelegate( typeof(Func <Office.IRibbonControl, TResult>), RibbonView, mi); return(viewFunc(control)); } Tracer.WriteErrorLine("Method '{0}' not found", methodName); return(result); }