Saltar al contenido

Paleta de colores personalizada en Visual Studio Color Property Editor

Ya no necesitas buscar más en otros sitios porque llegaste al lugar justo, tenemos la solución que necesitas hallar sin problema.

El editor que le ayuda a elegir el color en Visual Studio es ColorEditor que no conserva colores personalizados en diferentes controles. Para resolver el problema, debe:

  • Crea una personalizada UITypeEditor Residencia en ColorEditor
  • Registre el editor para el tipo Color en el inicio de Visual Studio

Aquí hay una respuesta detallada que incluye los códigos que utilicé para resolver el problema.

Crear CustomColorEditor

ColorEditor usa un privado ColorUI clase para mostrar un privado ColorPalette control. La paleta utiliza un array de colores para mostrar colores personalizados.

Crear CustomColorEditor Yo derivé de ColorEditor y usando la reflexión, encontró esos miembros y llenó el array usando un static array de algunos colores para mostrar en la primera carga. Luego, después de cerrar el editor, obtengo colores personalizados del editor y los coloco en el static array e inicialice el editor de color usando este static array en la próxima carga. De esta forma, los colores personalizados se comparten entre todas las instancias de mi CustomColorEditor.

Mostrar CustomColorEditor en lugar del ColorEditor predeterminado

Para mostrar un editor de tipos de interfaz de usuario para todas las propiedades de un tipo específico, debe agregar un Editor attribute al tipo. Pero desde Color no es mi tipo, como puedo agregar Editor attribute ¿lo?

TypeDescriptor.AddAttributes me ayudó a registrar al editor para Color escribe.

¿Dónde debo ejecutar el código para registrar el attribute? ¡Seguramente en tiempo de ejecución de Visual Studio!

Para hacerlo, creé un proyecto de paquete de Visual Studio y puse el código de registro en Initialize método de empaque. Yo también agregué ProvideAutoLoad attribute a la clase del paquete para que se cargue automáticamente cuando abro una solución.

Luego instalé el paquete.

Luego puse el dll en GAC usando gacutil.exe /i "path to dll". En lugar de GAC también puede poner el dll en Visual Studio cerca devenv.exe porque el tiempo de ejecución visual stusio lo usará para mostrar mi editor de color personalizado para todas las propiedades de color.

Conclusión

Después de realizar las tareas anteriores, abrí una nueva instancia de Visual Studio y en mi proyecto de Windows Forms, veo mi editor de color personalizado que se muestra para los colores. Se muestran los colores iniciales que configuré. ¡Además, el editor de color conservaba colores personalizados incluso entre diferentes formas!

Compartí los códigos aquí. Puede utilizar la idea y los códigos para mejorar el editor. Puede proporcionar sus colores personalizados para que se muestren en el editor al principio. Incluso puede agregar otra pestaña al editor. Aquí están mis códigos:

Código para el editor de color

class CustomColorEditor : ColorEditor

    private static Color[] Colors;
    static CustomColorEditor()
    
        Colors = new Color[]
            Color.Red, Color.Green, Color.Blue, Color.White, 
            Color.White, Color.White, Color.White, Color.White, 
            Color.White, Color.White, Color.White, Color.White, 
            Color.White, Color.White, Color.White, Color.White, 
        ;
    
    public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)
     BindingFlags.NonPublic);
        var palObject = palField.GetValue(colorUiObject);
        var palCustomColorsField = palObject.GetType().GetField("customColors", BindingFlags.Instance 

Código del paquete

[PackageRegistration(UseManagedResourcesOnly = true)]
[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
[Guid(GuidList.guidVSPackage1PkgString)]
[ProvideAutoLoad(Microsoft.VisualStudio.Shell.Interop.UIContextGuids80.SolutionExists)]
public sealed class VSPackage1Package : Package

    public VSPackage1Package()  
    protected override void Initialize()
    
        base.Initialize();
        TypeDescriptor.AddAttributes(typeof(Color), new EditorAttribute(typeof(CustomColorEditor), typeof(UITypeEditor)));
    

Resultado

Este sería el resultado en la ventana de propiedades de Visual Studio. Mira eso Red, Green, Blue en la parte inferior del cuadro de diálogo que agregamos:

ingrese la descripción de la imagen aquí

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *