我已经实现了一些自定义行为和触发器,并通过XAML添加它们.它们在运行时工作正常但是在设计时阻止了Cider设计器视图的加载,并且可能会在Blend中引起问题,尽管我还没有确认.
以下是我为其中一个行为实施的内容概述;希望有人可以指出我所缺少的东西.
行为看起来像这样;
using System.Windows.Controls; using System.Windows.Data; using System.Windows.Interactivity; namespace MiX.Core.UI.Silverlight { public class UpdateOnTextChangedBehavior : Behavior<TextBox> { protected override void OnAttached() { base.OnAttached(); this.AssociatedObject.TextChanged += OnAssociatedObjectTextChanged; } void OnAssociatedObjectTextChanged(object sender,TextChangedEventArgs e) { BindingExpression binding = this.AssociatedObject.GetBindingExpression(TextBox.TextProperty); if (binding != null) { binding.UpdateSource(); } } protected override void OnDetaching() { base.OnDetaching(); this.AssociatedObject.TextChanged -= OnAssociatedObjectTextChanged; } } }
XAML中的实现看起来像这样;
<TextBox x:Name="Username" Text="{Binding Username,Mode=TwoWay}" BorderThickness="1" Style="{StaticResource TextBoxStyleGeneral}" Foreground="#FF333333" FontSize="10" BorderBrush="{x:Null}" Grid.Column="1" d:LayoutOverrides="GridBox" Margin="2,0" Grid.ColumnSpan="2" Background="{x:Null}" VerticalAlignment="Center" Grid.Row="1"> <i:Interaction.Behaviors> <mixcore:UpdateOnTextChangedBehavior/> </i:Interaction.Behaviors> </TextBox>
在XAML编辑器中< mixcore:UpdateOnPasswordChangedBehavior />元素以波浪形突出显示并报告错误“UpdateOnTextChangedBehavior”类型的值无法添加到“BehaviorCollection”类型的集合或字典中.尝试在“设计”视图中查看时,设计器无法加载,说明文档包含必须在加载设计器之前修复的错误.
解决方法
在Silverlight中,如果设计无法加载我们在代码中所做的更改,那么它就是silverlight中的错误.
Silverlight尚未设计为通过代码处理各种异常,例如,如果你确实有任何带有返回类型的代码,并且你没有在那里检查null,那么它再次加载设计器这个案例主要见于重写IValueConverter方法{x:静态} ……等等
您的代码没有任何问题,除非它编译正常并且不会抛出异常.
不要担心设计师.