限制Silverlight/WPF行为的可见性

6
在Silverlight(可能也适用于WPF)中,当我为例如ItemsControl定义一个System.Windows.Interactivity.Behavior<T>时,像这样:
public class SomeAwesomaticBehavior : Behavior<ItemsControl>
{
}

即使对于普通的非项控件,行为也会出现在Visual Studio的XAML编辑器中(可能还会出现在设计师中),并引发难以处理的运行时异常。这与附加属性相反,后者仅出现在预期类型中。
有没有办法限制其可见性?也许有某种神奇的属性(尽管这将是冗余声明)?
如果今天没有办法,我希望未来会有。因为当大量与当前对象无关的行为出现时,它确实会让同事和设计人员感到困惑。
更新:我已经提交了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
1个回答

3

@HeRz,你说得对,没有办法按照目标类型筛选行为。Blend(以及可能是VS设计师)使用反射来查找所有从基础类型Behavior继承的类型,并在资产列表中显示它们。

Blend将阻止你将一个行为或触发器拖放到不适合它的项目上。这应该有助于防止它们被滥用。

我通常会尝试编写可重用的代码片段,而不是针对特定情况进行限定的行为。它们只是具有特定目的的工具。


哇,终于在这么多年后得到了答案,谢谢。我已经怀疑没有办法了。我编写了广泛可重用和非常通用的行为,但仍然有一些情况并不总是适用于所有“DependencyObject”类型。因此,我想这几天会提出一个功能请求。 - herzmeister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接