我已经实现了一些自定义行为和触发器,并通过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”类型的集合或词典中 。尝试在“设计”视图中查看时,设计器无法加载,说明文档包含必须在加载设计器之前修复的错误。
答案 0 :(得分:1)
在Silverlight中,如果设计无法加载我们在代码中所做的更改,那么它就是silverlight中的错误。
Silverlight尚未设计为通过代码处理各种异常,例如,如果你有任何返回类型的代码,并且你没有在那里检查null,那么再次它不会加载设计师这种情况主要是看到覆盖IValueConverter方法{x:Static} ......依此类推
您的代码没有任何问题,除非它编译正常并且不会抛出异常。 不要担心设计师。