Visual Studio颜色属性编辑器中的自定义调色板

哈雷尼斯

在Visual Studio Designer中,可以在属性窗口下使用颜色选择器选择ForeColorBackColor等等。当您要选择颜色时,颜色选择器会带有“自定义,Web,系统”选项卡。如果选择“自定义”,则可以向选择器添加新的颜色,但是只有底部的2行是可更改的,并且更改不会在控件之间持久存在。因此,如果您向调色板添加颜色,则当您选择另一个控件并想要更改时,例如,BackColor您以前添加的颜色不存在。

有没有一种方法可以创建一组自定义颜色并将其导入到设计师的颜色选择控件中?

注意:这个问题不是关于VS主题的问题,也不是关于颜色是否可以在后面的代码中作为类实现的问题。我正在寻找一种定制设计师的方法。

雷扎·阿盖伊

帮助您在Visual Studio中选择颜色的编辑器ColorEditor不会在不同控件之间保留自定义颜色。要解决该问题,您应该:

  • 创建UITypeEditor基于的自定义ColorEditor
  • Color在Visual Studio启动时注册编辑器以进行输入

这是一个详细的答案,其中包括我用来解决该问题的代码。

创建CustomColorEditor

ColorEditor使用私有ColorUI类显示私有ColorPalette控件。调色板使用颜色数组显示自定义颜色。

为了创建CustomColorEditorColorEditor反射派生并使用反射的I ,找到这些成员并使用一些颜色的静态数组填充数组,以在首次加载时显示它们。然后,在关闭编辑器之后,我从编辑器获取自定义颜色,并将其放入静态数组中,并在下次加载时使用此静态数组初始化颜色编辑器。这样,自定义颜色将在my的所有实例之间共享CustomColorEditor

显示CustomColorEditor而不是默认的ColorEditor

要显示特定类型的所有属性的ui类型编辑器,应将Editor属性添加到该类型。但是由于Color不是我的类型,如何Editor为它添加属性?

TypeDescriptor.AddAttributes帮助我注册了Color类型的编辑器

我应该在哪里运行代码来注册属性?当然在Visual Studio运行时!

为此,我创建了一个Visual Studio Package项目,并将注册代码放在Initializepackage方法中。我还向ProvideAutoLoad包类添加了属性,以使其在打开解决方案时自动加载。

然后我安装了软件包。

然后我将dll放入GAC中gacutil.exe /i "path to dll"代替GAC,还可以将dll放在Visual Studio中,devenv.exe因为Visual stusio运行时将使用它来显示所有颜色属性的自定义颜色编辑器。

结论

完成上述任务后,我打开了一个新的Visual Studio实例,并在Windows Forms项目中看到了针对颜色显示的自定义颜色编辑器。我设置的初始颜色显示出来。此外,颜色编辑器甚至在不同形式之间也保留了自定义颜色!

我在这里分享了代码。您可以使用构想和代码来增强编辑器。您可以提供自定义颜色以在开始时显示在编辑器中。您甚至可以在编辑器中添加另一个标签。这是我的代码:

颜色编辑器代码

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)
    {
        var colorEditorObject = this;
        Type colorUiType = typeof(ColorEditor).GetNestedType("ColorUI", BindingFlags.NonPublic);
        var colorUiConstructor = colorUiType.GetConstructors()[0];
        var colorUiField = typeof(ColorEditor).GetField("colorUI", BindingFlags.Instance | BindingFlags.NonPublic);
        var colorUiObject = colorUiConstructor.Invoke(new[] { colorEditorObject });
        colorUiField.SetValue(colorEditorObject, colorUiObject);
        var palField = colorUiObject.GetType().GetField("pal", BindingFlags.Instance | BindingFlags.NonPublic);
        var palObject = palField.GetValue(colorUiObject);
        var palCustomColorsField = palObject.GetType().GetField("customColors", BindingFlags.Instance | BindingFlags.NonPublic);
        palCustomColorsField.SetValue(palObject, Colors);
        var selectedValue = base.EditValue(context, provider, value);
        Colors = palCustomColorsField.GetValue(palObject) as Color[];
        return selectedValue;
    }
}

包装代号

[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)));
    }
}

结果

这将是Visual Studio属性窗口中的结果。看看那些RedGreenBlue在我们添加对话框的底部:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Visual Studio可扩展性-自定义语言文本编辑器设置

来自分类Dev

如何在Visual Studio编辑器窗口中隐藏或显示自定义边距

来自分类Dev

在R中定义自定义颜色调色板

来自分类Dev

在Visual Studio调试器中以自定义顺序显示属性

来自分类Dev

自定义 seaborn 调色板中的颜色不一致

来自分类Dev

Visual Studio 2017 更新 26430.04 后文本编辑器中的颜色不正确

来自分类Dev

Seaborn的自定义调色板

来自分类Dev

Visual Studio将类的所有属性转储到编辑器中

来自分类Dev

Visual Studio XAML编辑器忽略属性选项卡中的按键

来自分类Dev

在Visual Studio 2015编辑器中摆脱“对角箭头”

来自分类Dev

Visual Studio编辑器中的不同线高

来自分类Dev

在Visual Studio Code扩展中访问编辑器的DOM

来自分类Dev

Visual Studio 2015:文本编辑器中的行

来自分类Dev

终端中的 Visual Studio Code 编辑器

来自分类Dev

扩展Visual Studio代码编辑器

来自分类Dev

Visual Studio 2015图标编辑器

来自分类Dev

Visual Studio Code 编辑器图标

来自分类Dev

Visual Studio的“属性”窗格中具有子属性的自定义属性

来自分类Dev

Visual Studio社区2013 SP4在文本编辑器中不显示任何颜色,仅黑白

来自分类Dev

在camunda modeler中为自定义调色板添加自定义图标

来自分类Dev

创建 vscode 主题时如何自定义命令调色板颜色和键绑定

来自分类Dev

Visual Studio 2012(Windows 8.1)C#编辑器,用户类型颜色

来自分类Dev

Visual Studio 2012(Windows 8.1)C#编辑器,用户类型颜色

来自分类Dev

如何防止Visual Studio(2015)中的XAML编辑器在属性值后插入无用的多余引号?

来自分类Dev

在Visual Studio中修改自定义项目系统的项目属性

来自分类Dev

在 Visual Studio 中打开的自定义项中的引用

来自分类Dev

为Julia集生成自定义调色板

来自分类Dev

在Visual Studio 2015中禁止自定义代码分析器的警告

来自分类Dev

自定义Visual Studio Code中的语法突出显示

Related 相关文章

  1. 1

    Visual Studio可扩展性-自定义语言文本编辑器设置

  2. 2

    如何在Visual Studio编辑器窗口中隐藏或显示自定义边距

  3. 3

    在R中定义自定义颜色调色板

  4. 4

    在Visual Studio调试器中以自定义顺序显示属性

  5. 5

    自定义 seaborn 调色板中的颜色不一致

  6. 6

    Visual Studio 2017 更新 26430.04 后文本编辑器中的颜色不正确

  7. 7

    Seaborn的自定义调色板

  8. 8

    Visual Studio将类的所有属性转储到编辑器中

  9. 9

    Visual Studio XAML编辑器忽略属性选项卡中的按键

  10. 10

    在Visual Studio 2015编辑器中摆脱“对角箭头”

  11. 11

    Visual Studio编辑器中的不同线高

  12. 12

    在Visual Studio Code扩展中访问编辑器的DOM

  13. 13

    Visual Studio 2015:文本编辑器中的行

  14. 14

    终端中的 Visual Studio Code 编辑器

  15. 15

    扩展Visual Studio代码编辑器

  16. 16

    Visual Studio 2015图标编辑器

  17. 17

    Visual Studio Code 编辑器图标

  18. 18

    Visual Studio的“属性”窗格中具有子属性的自定义属性

  19. 19

    Visual Studio社区2013 SP4在文本编辑器中不显示任何颜色,仅黑白

  20. 20

    在camunda modeler中为自定义调色板添加自定义图标

  21. 21

    创建 vscode 主题时如何自定义命令调色板颜色和键绑定

  22. 22

    Visual Studio 2012(Windows 8.1)C#编辑器,用户类型颜色

  23. 23

    Visual Studio 2012(Windows 8.1)C#编辑器,用户类型颜色

  24. 24

    如何防止Visual Studio(2015)中的XAML编辑器在属性值后插入无用的多余引号?

  25. 25

    在Visual Studio中修改自定义项目系统的项目属性

  26. 26

    在 Visual Studio 中打开的自定义项中的引用

  27. 27

    为Julia集生成自定义调色板

  28. 28

    在Visual Studio 2015中禁止自定义代码分析器的警告

  29. 29

    自定义Visual Studio Code中的语法突出显示

热门标签

归档