Silverlight开发中的疑难杂症-如何通过代码附加Behavior

今天刚写了个Behavior,想通过代码的方式手动附加到控件上,但是一时不知道如何着手,于是就在Blend中拖出了一个Behavior,然后研究了它自动生成的xaml代码,如下:

<TextBox HorizontalAlignment="Left" Margin="170,198,0,218" Width="123" TextWrapping="Wrap">

        <i:Interaction.Behaviors>

             <YQL_Core_Behaviors:TextBoxFilterBehavior TextBoxFilterOptions="Numeric"/>

        </i:Interaction.Behaviors>

    </TextBox>

观察了下,好像是通过System.Windows.Interactivity名字空间下的Behaviors附加属性进行添加的,于是想当然写下了如下代码:

TextBoxFilterBehavior behavior = new TextBoxFilterBehavior();

behavior.TextBoxFilterOptions = TextBoxFilterOptions.Numeric | TextBoxFilterOptions.Dot;

this.SetValue(Interaction.BehaviorsProperty, behavior);

很自然的,运行出错,提示TextBoxFilterBehavior不是Behaviors的有效值,于是通过f12查看了Interaction的定义,发现Behaviors是一个BehaviorCollection类型附加属性,于是尝试创建这个BehaviorCollection集合,很杯具的再次失败了~

最后看了Interaction下仅有的2个方法,尝试用GetBehaviors方法先获取了BehaviorCollection集合的引用,然后在往里添加了我自定义的Behavior,运行成功,最终的代码如下:

TextBoxFilterBehavior behavior = new TextBoxFilterBehavior();

behavior.TextBoxFilterOptions = TextBoxFilterOptions.Numeric | TextBoxFilterOptions.Dot;

Interaction.GetBehaviors(this).Add(behavior);

这篇文章非常的简单,只是记录了第一次尝试使用一个东西时的一种思考方式,希望能给看到这篇文章的朋友一定的启示,只要能帮到一个朋友,我就满意了。

posted on 2010-03-07 22:45  yingql  阅读(1169)  评论(8编辑  收藏  举报

导航