在Silverlight(可能还有WPF)中,当我为例如System.Windows.Interactivity.Behavior<T>
定义时,{ ItemsControl
,如
public class SomeAwesomaticBehavior : Behavior<ItemsControl>
{
}
它将出现在Visual Studio的XAML编辑器中(也可能出现在Designer中),即使对于普通的非Items控件也会出现令人讨厌的运行时异常。这与仅在预期类型中出现的附加属性相反。
有没有办法限制这种可见性?可能有一些神奇的属性(虽然这可能是一个多余的声明)?
如果今天没办法,我希望将来会有这样的事情吗?因为当弹出很多与当前对象无关的行为时,它肯定会让同事和设计人员感到困惑。
更新:我已经提交了uservoice项目。
答案 0 :(得分:3)
@HeRz你是对的,没有办法按目标类型过滤行为。 Blend(可能还有vs designer)使用反射来查找从基类型行为继承的所有类型,并将它们显示在资源列表中。
Blend将阻止您将行为或触发器拖动到不适合的项目上。所以这应该有助于防止他们滥用。
我通常会尝试将行为编写为可重复使用的代码片段,而不是作用于特定情况。它们只是具有特定目的的工具。