如何添加您的Silverlight控件的工具箱图标
更改历史记录:
- 首次发表于1/21/2008为Silverlight 2/VS2008/Toolkit 2008年12月推出。
- 2009年12月5日更新为Silverlight 4/VS2010/Blend3/Toolkit 2009年11月发行。
控制在Silverlight运行时(例如system.windows.dll)和SDK(例如system.windows.controls.dll)在Visual Studio和Blend有很好的工具箱图标。 2008年12月发布的Silverlight工具包,控制工具包也一样,在我以前的帖子描述Silverlight工具包的设计时功能:
这篇文章解释它是如何在Silverlight 2 SDK,并在2008年12月发布的Silverlight工具包。
在运行时大会的控制图标
2008年12月发布Silverlight工具包演示了如何嵌入控件工具箱图标,而不使用设计时间大会。
打开Silverlight.Controls.sln(见以前的帖子,在Visual Studio设计时功能的实现在Silverlight工具包如何下载该工具包源的更多信息):
在记事本或打开Controls.csproj:
<ItemGroup>
<EmbeddedResource Include="Microsoft.Windows.Controls.AutoCompleteBox.Icon.png"
<EmbeddedResource Include="Microsoft.Windows.Controls.DockPanel.Icon.png"
<EmbeddedResource Include="Microsoft.Windows.Controls.Expander.Icon.png"
<EmbeddedResource Include="Microsoft.Windows.Controls.Label.Icon.png"
<EmbeddedResource Include="Microsoft.Windows.Controls.TreeView.Icon.png"
<EmbeddedResource Include="Microsoft.Windows.Controls.Viewbox.Icon.png"
</ ItemGroup>
在反射或打开Microsoft.Windows.Controls.dll:
所有三个显示,自定义工具箱图标嵌入的资源,在运行时组装Microsoft.Windows.Controls.dll一个特定的命名约定。 采取上述Microsoft.Windows.Controls.Microsoft.Windows.AutoCompleteBox.Icon.png作为一个例子:
- 第一Microsoft.Windows.Controls是根命名空间,在controls.csproj文件指定线:<RootNamespace> System.Windows.Controls </ RootNamespace>
- 接下来Microsoft.Windows.Controls.AutoCompleteBox是AutoCompleteBox类,包括命名空间,但不大会的完全限定名称。
- 名称的其余部分,Icon.png,指定图标资源类型,如将稍后解释。
在设计时大会的控制图标
在Silverlight 2 SDK表明嵌入控制在设计时大会图标的方法。
在反射打开System.Windows.Controls.Design.dll(它是安装在%PROGRAMFILES%\微软的SDK \ Silverlight的\ V2.0 \图书馆\客户端):
上述Controls.Design.Icons.Calendar.bmp为例:
- Controls.Design是根命名空间,在其行<RootNamespace> Controls.Design </ RootNamespace> csproj文件指定
- 图标是Calendar.bmp文件在源代码树的子文件夹
- Calendar.bmp是图标资源文件的源代码树的名称
控制图标资源命名约定
因此,从以上两个例子,我们可以看到,控制自定义工具箱图标嵌入的资源,在这两种运行时组件(所以你不必船舶设计时大会),或设计时间大会(所以你必须改变图标的灵活性不同的文化,如本地化,而不触及的运行时间大会)。 工具(现在的Visual Studio 2008 SP1的)尝试,找到一个特殊的命名约定的图标:
- 搜索一个资源的文件名没有扩展名匹配的控制类型的名称,包括命名空间,用“{的XAML | BMP | PNG | GIF | JPG | JPEG} [图标*]”。
- 注意子目录的影响在其中嵌入的资源被发现命名空间。 例如,该工具包的图标Microsoft.Windows.Controls子文件夹下,以避免把所有的图标文件名很长的字符串,而SDK图标子文件夹下的所有图标。
- 支持的扩展名和文件类型:XAML中,BMP,GIF,JPG,JPEG和PNG
- 推荐为位图文件格式的图像大小为64 × 64。
- [。图标*]的命名约定是可选的,允许你指定多个大小图标的图像。 本场比赛遵循以下算法:
- 矢量的XAML
- 如果有一个大小完全匹配(两个维度)使用它
- 使用最接近的匹配,基于大小和长宽比
- 如果一个给定的资源文件是无效的XAML或有效的图像文件,下一场比赛将使用,直到找到一个。
- 如果图像中没有发现控制相同的命名空间,一个松散的匹配类型名称单独将搜索对所有的资源,SDK中的案件。
- 不同的主机使用不同的图像大小为他们的工具箱图标。
- 混合使用其庞大的规模和12 × 12 24 × 24,其体积小(我不认为这是在Blend 2 SP1)。
- 苹果酒(Visual Studio中)使用16 × 16的bmp文件。
指定在WPF设计器的控制工具箱图标博客文章介绍更多细节的命名约定。
Blend3和VS2010的更新
由于这个职位上1/21/2008首次出版,我们已经取得了两个关键的改进有关控制图标:
- Blend 3中显示的控件的图标资源库:大图标(24 × 24),对象和时间线的小图标(12 × 12)。 请参见 Silverlight 设计时间:7月2009年推出更新的更多信息工具包。
- Blend 3中和Visual Studio 2010,您可以注册您的控件(及其关联的图标)。 请参阅注册与Visual Studio和Blend Silverlight控件的更多信息。
- 图标资源的命名约定一起修改设计时组件的命名约定。 Silverlight设计时的大会,为增强的命名约定的更多信息,设计时间组件。 请注意, 图标资源搜索设计时元数据 ,即加载顺序是相反的顺序 ,Blend将搜索嵌入的图标资源为*. Expression.Design *. DLL首先在上面的图标资源命名约定的控制;只有当它失败将混合搜索共享*.设计*. DLL第二;如再次失败,只有将它嵌入的图标资源搜索相应的运行时DLL,如果都失败了,Blend会显示为默认的图标控制。 Visual Studio 2010中类似的方式,但搜索*. VisualStudio.Design *. DLL。
- Blend和Visual Studio现在支持更多的图标格式,将大规模的图标,如果没有找到所需的大中型资源(24 × 24和12 × 12为混合,和16 × 16的VS)。
Silverlight工具包嵌入图标资源的使用以下命名约定:
- 只需键入名称(如日历),而不是使用全名(命名空间+类型,当然。System.Windows.Controls.Calendar),以避免歧义。
- 交融共享。design.dll的图标,和Visual Studio工具箱中的图标。VisualStudio.Design *. DLL的。 这样,VS2010中可以显示正确的工具箱图标,如果在VisualStudio.Design *. DLL存在; VS2010中如果没有,可以载入混合图标,它的规模为16 × 16,并显示在工具箱中。
- 仅作为最后手段(当然,以避免航运与设计时间大会唯一的图标资源),在运行时DLL的图标资源。
你可以看到控制图标资源命名约定Silverlight工具包的源代码 :










检查http://www.ArtistsValley.com一些广泛的XAML和Silverlight图标了极大的代价!