如何使我的子派生自定义控件出现在Blend Assets库中?

时间:2011-08-16 13:36:31

标签: wpf-controls custom-controls expression-blend custom-component expression-blend-4

我正在基于优秀的Mockups library available on CodePlex创建一系列窗口模型模板。

我也使用他们的BaseMockup作为我的控件的基础,并且我遵循列出的here步骤的相同轮廓,用于从现有控件进行子派生(创建一个新的空类,添加默认值样式为/Themes/generic.xaml等。)

控件工作得很好 - 唯一的一点就是它没有出现在Assets库中。我认为这是因为它是子派生的,或者因为我需要一些属性(相当于the ToolboxItemAttribute的WinForms控件?...哪些不起作用)让它连接起来。

当我修改代码以直接从Control派生时,它会显示 - 不需要自定义属性。当然,这会破坏我想要做的目的......

我唯一能找到的就是several articles telling我要使用注册表项进行清理,并且没有一个是明确的,或者建议使用Blend 4这样做的明确方法。最后一篇广告宣传为Blend 4技巧文章,但最后承认它抄袭了其他两篇内容(对于Blend 3)。

这是我唯一的选择 - 注册我的DLL吗?有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

前段时间我写了blogpost about this。我已经包含了一个.reg文件和一个.bat文件来设置寄存器和一些目录。我认为这就是你要找的东西。

答案 1 :(得分:1)

我相信你确实需要使用注册表项。具体地,

32位:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NET Framework \ v4.0.30319 \ AssemblyFoldersEx

64位:HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NET Framework \ v4.0.30319 \ AssemblyFoldersEx

使用控件程序集的名称创建一个新密钥。然后编辑此键下的默认字符串值,并将值设置为安装控件程序集的目录。 See here获取完整示例(使用Silverlight路径)。

答案 2 :(得分:1)

找到它 - 毕竟有一个模拟属性,它是ToolboxBrowsableAttribute

你必须经历一个更加严谨的设置,但它运作良好 - 没有必要的注册表。它需要创建一个设计器元数据提供程序类,将程序集归因于设计器可发现,然后将属性添加到元数据提供程序中的子派生控件。

确保为您的Visual Studio版本选择适当的页面版本,因为该界面在2008年到2010年之间有了很大的改变。

This article on CodeProject有一些很好的,真实的例子来说明这一点。尽管如此,他们都是2008年的风格,所以如果你使用2010年就要记住这一点。