限制Silverlight/WPF行为可见性

her*_*ter 6 silverlight wpf xaml behavior

在Silverlight(可能还有WPF)中,当我定义一个System.Windows.Interactivity.Behavior<T>例如a ItemsControl,就像

public class SomeAwesomaticBehavior : Behavior<ItemsControl>
{
}
Run Code Online (Sandbox Code Playgroud)

它将出现在Visual Studio的XAML编辑器中(也可能出现在Designer中),即使对于普通的非Items控件也会出现令人讨厌的运行时异常.这与仅为预期类型出现的附加属性相反.

有没有办法限制这种可见性?一些神奇的属性可能(虽然这将是一个多余的声明)?

如果今天没办法,我希望将来会有这样的事情吗?因为当弹出很多与当前对象无关的行为时,肯定会让同事和设计人员感到困惑.

更新:我已经提交了uservoice项目.

Silverlight:http://dotnet.uservoice.com/forums/4325-silverlight-feature-suggestions/suggestions/1224253-restrict-behavior-visibility? ref = title

WPF:http://dotnet.uservoice.com/forums/40583-wpf-feature-suggestions/suggestions/1224259-restrict-behavior-visibility? ref = title

Jas*_*son 3

@HeRz你是对的,没有办法按目标类型过滤行为。Blend(可能还有 vs 设计器)使用反射来查找您创建的从基本类型Behavior 继承的所有类型,并将它们显示在资源列表中。

Blend 将防止您将行为或触发器拖到不想要的项目上。因此这应该有助于防止它们的滥用。

我通常尝试将行为编写为可重用的代码片段,而不是局限于特定情况。它们只是具有特定用途的工具。