2010-09-10 75 views
6

在Silverlight(也可能是WPF)中,当我为例如System.Windows.Interactivity.Behavior<T>定义时,一个ItemsControl,像限制Silverlight/WPF行为可见性

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

回答

3

@HeRz你是正确的,有没有办法过滤通过他们的目标类型的行为。 Blend(也可能是vs设计器)使用反射来查找您创建的所有类型,这些类型从基本类型行为继承并将其显示在资产列表中。

混合将会阻止您将行为或触发器拖拽到不属于它的项目上。所以这应该有助于防止他们的滥用。

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

+0

哇,终于这些年来的答案,谢谢。我已经怀疑没有办法。我写了广泛的可重用和非常普遍的行为,但仍然有一些情况并不总是对所有的“DependencyObject”类型有意义。所以,我想我现在要提交一个功能请求。 – herzmeister 2010-10-21 15:42:16