public async void captureRef(int tag, JSValue options, IReactPromise <string> promise)
        {
            string format  = options["format"].IsNull ? "png" : options["format"].AsString();
            double quality = options["quality"].IsNull ? 1.0 : options["quality"].AsDouble();
            int    width   = options["width"].IsNull ? 0 : options["width"].AsInt16();
            int    height  = options["height"].IsNull ? 0 : options["height"].AsInt16();
            string result  = options["result"].IsNull ? "tmpfile" : options["result"].AsString();
            string path    = options["path"].IsNull ? null : options["path"].AsString();

            if (format != "png" && format != "jpg" && format != "jpeg")
            {
                promise.Reject(new ReactError {
                    Code = ViewShot.ErrorUnableToSnapshot, Message = "Unsupported image format: " + format + ". Try one of: png | jpg | jpeg"
                });
                return;
            }

            try
            {
                var control = XamlUIService.FromContext(_context.Handle).ElementFromReactTag(tag) as FrameworkElement;

                ViewShot view   = new ViewShot();
                var      output = await view.Execute(control, format, quality, width, height, path, result);

                promise.Resolve(output);
            }
            catch (Exception exc)
            {
                promise.Reject(new ReactError {
                    Message = exc.Message, Exception = exc
                });
            }
        }
        public void DispatchEvent <T>(FrameworkElement view, string eventName, T arg)
        {
            var argWriter = arg as JSValueArgWriter;

            if (argWriter != null)
            {
                XamlUIService.FromContext(Handle).DispatchEvent(view, eventName, argWriter);
            }
            else
            {
                XamlUIService.FromContext(Handle).DispatchEvent(view, eventName, (IJSValueWriter writer) => writer.WriteValue(arg));
            }
        }