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