Проблема времени разработки с настраиваемым поведением и триггерами в Silverlight

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


person Steve Crane    schedule 24.08.2010    source источник
comment
Запуск нового проекта и копирование образца кода, похоже, отлично работает (для меня) в VS2010 без проблем с дизайнером или Blend. Вы делаете что-нибудь еще с TextBox или Behavior в коде программной части?   -  person Dan Auclair    schedule 24.08.2010
comment
Дэн, кажется, ты прав. В реальном приложении есть два действия помимо этого поведения, и я вижу, что одно из них вызывает метод, который использует отражение для установки значений свойств зависимостей. Возможно, это то, что мешает ему работать во время разработки.   -  person Steve Crane    schedule 25.08.2010


Ответы (1)


В Silverlight, если дизайн не может загружаться с изменениями, которые мы внесли в код, то в Silverlight это ошибка.

Silverlight еще не предназначен для обработки различных исключений с помощью кода, например, если у вас есть какой-либо код с типом возврата, и вы не проверяете там значение null, то опять же он не загружает конструктор, этот случай в основном наблюдается с переопределением IValueConverter метод {x: Static} ... и так далее

В вашем коде нет ничего плохого до тех пор, пока он не скомпилируется нормально и не выдаст исключение. Не беспокойтесь о дизайнере.

Точно так же вы можете рассмотреть один случай: http://connect.microsoft.com/VisualStudio/feedback/details/361509/xaml-designer-cannot-handle-typename-with-nested-classes

person Ruchika rana    schedule 18.03.2011