演练:为工具箱图标提供元数据

[本文档仅供预览,在以后的发行版中可能会发生更改。包含的空白主题用作占位符。]

本演练演示 windows presentation foundation 自定义控件库中演示如何提供工具箱图标为不同的设计器 (例如, Visual Studio 和 (WPF) expression blend,。 将自定义控件添加到设计器的工具箱时,相应的图标显示在控件的名称旁边。

适用于 Visual Studio 的 WPF 设计器 启用提供自定义工具箱图标为不同的设计器。 例如,可以针对您的自定义控件的不同图标在 Visual Studio 和 expression blend。 设计时实现提供的图标将重写控件的运行时程序集内的默认图标。

在本演练中,您将执行下列任务:

  • 具有嵌入图标位图创建一个 WPF 自定义控件库项目。

  • 创建重写默认工具箱图标的设计时元数据的一个单独的程序集。

  • 测试控件的图标在设计时。

完成后,将会替换自定义控件的默认运行时图标在设计时。

备注

您看到的对话框和菜单命令可能会与 " 帮助 " 中的描述不同具体取决于您现用的设置或版本。若要更改设置,请选择在 工具 菜单的 导入和导出设置 。有关更多信息,请参见 Visual Studio 设置

系统必备

您需要以下组件来完成本演练:

  • Visual Studio 2012 RC.

创建具有工具箱图标的自定义控件

若要为控件创建自定义工具箱图标,请将一个图像作为嵌入资源添加到控件的项目。

创建具有工具箱图标的自定义控件

  1. 创建新 WPF 自定义控件库名为 TailspinToysControlLibrary的项目在 Visual Basic 或 Visual C#。

  2. 将 CustomControl1 代码文件重命名为 TailspinToysControl。

  3. 添加作为嵌入资源名为的 TailspinToysControl.icon.bmp 一工具箱图标。 有关更多信息,请参见 演练:为控件创建自定义工具箱图标

  4. 使用 文本工具,在位图中绘制 默认值 ,指示工具箱何时加载控件程序集的默认图标。

  5. 将项目的输出路径设置为 “ \ TailspinToysControlLibrary \ bin \”。

  6. 生成解决方案。

创建设计时元数据程序集

设计时代码在特定元数据程序集中部署。 对于本演练,自定义元数据。 Visual Studio 和 expression blend 在名为 TailspinToysControlLibrary.Design 的程序集支持和部署。

创建设计时元数据程序集

  1. 创建名为 TailspinToysControlLibrary.Design的设计时程序集。 有关更多信息,请参见 演练:提供自定义设计时元数据

  2. 在代码编辑器中打开 RegisterMetadata 代码文件。

  3. 用下面的代码替换自动生成的代码。 将自定义设计时特性附加到 TailspinToysControl 类的此代码创建 AttributeTable

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Microsoft.Windows.Design;
    using Microsoft.Windows.Design.Features;
    using Microsoft.Windows.Design.Metadata;
    
    using TailspinToysControlLibrary;
    
    // The ProvideMetadata assembly-level attribute indicates to designers
    // that this assembly contains a class that provides an attribute table. 
    [assembly: ProvideMetadata(typeof(TailspinToysControlLibrary.Design.RegisterMetadata))]
    namespace TailspinToysControlLibrary.Design
    {
        internal class RegisterMetadata : IProvideAttributeTable
        {
            // Called by the designer to register any design-time metadata. 
            public AttributeTable AttributeTable
            {
                get
                {
                    AttributeTableBuilder builder = new AttributeTableBuilder();
    
                    // Set ToolboxBrowsableAttribute to true to display your custom control 
                    // in the Toolbox and in the Choose Items... dialog box. 
                    builder.AddCustomAttributes(typeof(TailspinToysControl), new ToolboxBrowsableAttribute(true));
    
                    return builder.CreateTable();
                }
            }
        }
    }
    
  4. 保存解决方案。

创建设计时工具箱图标

有了设计时程序集,您可以创建自定义工具箱图标并将其添加到项目为嵌入资源。 将创建两个图标,一 Visual Studio 的另一个用于 expression blend。

为 Visual Studio 创建设计时工具箱图标

  1. 添加一个新的位图文件向 TailspinToysControlLibrary.Design 项目。 将该位图文件命名为 TailspinToysControlLibrary.TailspinToysControl.VisualStudio.24bit.48x48.bmp。

  2. 在 " 属性 " 窗口中,将位图的 颜色 属性设置为 24 位。

  3. 使用 文本工具,在位图中绘制 元数据 ,指示图标是从设计器元数据设置。

  4. 解决方案资源管理器,选择位图文件。

  5. 在 " 属性 " 窗口中,将 生成操作 属性设置为 嵌入的资源

  6. 添加一个新的位图文件向 TailspinToysControlLibrary.Design 项目。 将该位图文件命名为 TailspinToysControlLibrary.TailspinToysControl.Expression.4bit.48x48.bmp。

    备注

    blend 仅加载 .png 文件作为图标,因此,可以使用外部画图程序创建 blend 图标。

  7. 右击 " 图像编辑器并选择 打开外部编辑器 从快捷菜单。

    画图应用程序打开。

  8. 使用 " 文本工具,绘制吻合位图,指示图标用于 expression blend 的 资产 窗口中。

  9. 图像保存为 .png 文件。

  10. 解决方案资源管理器,右击 TailspinToysControlLibrary.Design 项目,指向 add,然后选择 现有项 从快捷菜单。

  11. 添加现有项 对话框中,选择 " TailspinToysControlLibrary.TailspinToysControl.Expression.4bit.48x48.png 然后单击 add

  12. 解决方案资源管理器,选择该 .png 图像文件。

  13. 在 " 属性 " 窗口中,将 生成操作 属性设置为 嵌入的资源

  14. 删除空 TailspinToysControlLibrary.TailspinToysControl.Expression.4bit.48x48.bmp 位图文件。

  15. 生成解决方案。

测试工具箱图标

通过添加 TailspinToysControl 测试您的自定义工具箱图标添加到工具箱中。

测试工具箱图标

  1. 添加在 Visual Basic 中的新 WPF 名为 TestApplication 的应用程序项目或 Visual c# 为解决方案。

    在 MainWindow.xaml WPF Designer打开。 在工具箱中, TailspinToysControl 出现在 TailspinToysControlLibrary 控件 选项。 默认控件图标显示。

    默认工具箱图标

    备注

    在控件的运行时程序集内嵌入的图标不再显示。这是工具箱自动填充功能的限制。

  2. 在工具箱中,右击 TailspinToysControl,从快捷菜单中选择 Delete ,然后单击 确定

    TailspinToysControl 从 " 工具箱 " 中移除。

  3. 在工具箱中,右击 TailspinToysControlLibrary 控件 选项并选择 选择项 从快捷菜单。

    选择工具箱项 对话框打开。

  4. 单击 WPF 元素 选项。 有关更多信息,请参见 选择工具箱项, WPF 元素

  5. 单击 浏览 并定位到 TailspinToysControlLibrary \ TailspinToysControlLibrary \ bin 文件夹中。

  6. 双击将其选中的 TailspinToysControlLibrary.dll

    TailspinToysControlLibrary 程序集的详细信息显示在 选择工具箱项 对话框。 您的自定义设计时图标显示在 TailspinToysControl 分组框。

    带有自定义图标的“选择工具箱项”对话框

  7. 单击 确定

    TailspinToysControl 出现在具有 TailspinToysControlLibrary.TailspinToysControl.VisualStudio.24bit.48x48.bmp 图标的工具箱,重写在运行时程序集内的图标。

    自定义工具箱图标

后续步骤

  • 还可以在 expression blend 中加载自定义控件和设计时程序集。 expression blend 4 开始,您在 资产 窗口的 TailspinToysControlLibrary.TailspinToysControl.Expression.4bit.48x48.png 图标显示,当您添加项后对 TailspinToysControlLibrary.dll 程序集。

  • 通过使用 AssemblyFoldersEx 注册过程,可以部署运行时和设计时程序集。 有关更多信息,请参见 部署自定义控件和设计时程序集

请参见

任务

演练:提供自定义设计时元数据

演练:为控件创建自定义工具箱图标

参考

AttributeTable

概念

工具箱图标

部署自定义控件和设计时程序集

提供设计时元数据

其他资源

选择工具箱项, WPF 元素