Я реализовал несколько настраиваемых поведений и триггеров и добавил их через XAML. Они отлично работают во время выполнения, но предотвращают загрузку представления конструктора сидра во время разработки и, вероятно, вызовут проблему и в 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. При попытке просмотра в представлении «Дизайн» конструктор не загружается, указывая на то, что документ содержит ошибки, которые необходимо исправить перед загрузкой конструктора.