Silverlight中自定义行为和触发器的设计时问题

时间:2010-08-24 08:30:28

标签: silverlight xaml triggers behavior

我已经实现了一些自定义行为和触发器,并通过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”类型的集合或词典中 。尝试在“设计”视图中查看时,设计器无法加载,说明文档包含必须在加载设计器之前修复的错误

1 个答案:

答案 0 :(得分:1)

在Silverlight中,如果设计无法加载我们在代码中所做的更改,那么它就是silverlight中的错误。

Silverlight尚未设计为通过代码处理各种异常,例如,如果你有任何返回类型的代码,并且你没有在那里检查null,那么再次它不会加载设计师这种情况主要是看到覆盖IValueConverter方法{x:Static} ......依此类推

您的代码没有任何问题,除非它编译正常并且不会抛出异常。 不要担心设计师。

同样,你可以看一个案例:   http://connect.microsoft.com/VisualStudio/feedback/details/361509/xaml-designer-cannot-handle-typename-with-nested-classes