Beispiel #1
0
        public static dynamic GetPickerForm(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            var path = AssemblyTools.GetAssemblyPath(@"Microsoft.VisualStudio.Windows.Forms");
            var ass  = Assembly.LoadFrom(path);

            _resourcePickerDialogType = ass.GetType(@"Microsoft.VisualStudio.Windows.Forms.ResourcePickerDialog+ResourcePickerUI");
            dynamic resourcePickerDialogint = Activator.CreateInstance(_resourcePickerDialogType);

            var     resourcePickerServiceType = ass.GetType(@"Microsoft.VisualStudio.Windows.Forms.ResourcePickerService");
            dynamic resourcePickerService     = Activator.CreateInstance(resourcePickerServiceType,
                                                                         BindingFlags.NonPublic | BindingFlags.Instance,
                                                                         null,
                                                                         new object [] { (_DTE)provider.GetService(typeof(_DTE)), provider },
                                                                         null);


            dynamic resourcePickerDialog = ExposedObject.From(resourcePickerDialogint);

            resourcePickerDialog.Start(value, context?.PropertyDescriptor?.PropertyType, resourcePickerService, provider);

            Action <object, object> okAction = (o, e) =>
            {
                _okAction?.Invoke();
            };
            Action <object, object> cancelAction = (o, e) =>
            {
                _cancelAction?.Invoke();
            };

            var okButton   = resourcePickerDialog.okButton;
            var ei         = okButton.GetType().GetEvent("Click");
            var okDelegate = Delegate.CreateDelegate(ei.EventHandlerType, okAction.Target, okAction.Method);

            ei.AddEventHandler(okButton, okDelegate);

            var cancelButton = resourcePickerDialog.cancelButton;

            ei = cancelButton.GetType().GetEvent("Click");
            var cancelDelegate = Delegate.CreateDelegate(ei.EventHandlerType, cancelAction.Target, cancelAction.Method);

            ei.AddEventHandler(cancelButton, cancelDelegate);

            return(resourcePickerDialog);
        }
Beispiel #2
0
 public static T Cast <T>(ExposedObject t)
 {
     return((T)t._object);
 }