【问题标题】:What can I do to make my sub-derived custom control appear in the Blend Assets library?如何使我的子派生自定义控件出现在 Blend Assets 库中?
【发布时间】:2011-10-28 02:05:12
【问题描述】:

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

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

该控件运行良好 - 唯一的问题是它没有显示在资产库中。我认为这是因为它是子派生的,或者因为我需要一些属性(相当于 WinForms 控件的the ToolboxItemAttribute?...这不起作用)来连接它。

当我修改代码以直接从 Control 派生时,它会显示出来 - 不需要自定义属性。当然,这违背了我试图做的事情的目的......

我唯一能找到的就是severalarticlestelling我来搞乱注册表项,而且他们都不清楚或建议用 Blend 4 做到这一点的明确方法。最后一个广告是Blend 4 Tips 文章,但最后承认它抄袭了其他两个的内容(对于 Blend 3)。

这是我唯一的选择吗 - 注册我的 DLL?有没有更好的方法来做到这一点?

【问题讨论】:

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


    【解决方案1】:

    不久前我写了一个blogpost about this。我已经包含了一个 .reg 文件和一个 .bat 文件,用于设置寄存器和一些目录。我想这就是你要找的。​​p>

    【讨论】:

    • 这真的很酷,但不幸的是它并没有解决问题。即使我可以在程序集中看到我的 Control/UserControl 派生控件,这个特定的子派生控件仍然不显示。
    【解决方案2】:

    我相信您确实需要使用注册表项。具体来说,

    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 路径)。

    【讨论】:

    • 谢谢 - 这是正确的路径。 (我进行了编辑,因为 Microsoft 和 NET Framework 之间的反斜杠点被视为转义点...... doh!)
    • 噢!猜猜它在编辑器中被吞没了,谢谢。 :)
    • 抱歉,我不接受您的回答 - 但这只是因为我找到了我正在寻找的属性。不过再次感谢!
    【解决方案3】:

    找到了——毕竟有一个类比属性,它是ToolboxBrowsableAttribute

    您必须经历更多的繁琐才能设置它,但它工作得很好 - 不需要注册表。它需要创建一个设计器元数据提供程序类,将您的程序集归于设计人员可发现的属性,然后将属性添加到您的元数据提供程序内的子派生控件。

    确保为您的 Visual Studio 版本选择合适的页面版本,因为界面在 2008 年和 2010 年之间发生了很大变化。

    This article on CodeProject 有一些很好的、真实的例子来设置它。不过它们都是 2008 年的风格,所以如果您使用的是 2010 年,请记住这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多