2010-08-24 3 views
4

몇 가지 사용자 지정 동작과 트리거를 구현하여 XAML을 통해 추가했습니다. 런타임에는 문제가 없지만 디자인 타임에 Cider 디자이너보기가로드되지 않도록하고 Blend에서도 문제를 일으킬 수 있습니다. 물론 확인하지는 못했습니다.Silverlight의 사용자 지정 동작 및 트리거에 대한 디자인 타임 문제

다음은 내가 동작 중 하나에 대해 구현 한 내용의 개요입니다. 잘하면 누군가 내가 누락 된 것을 지적 할 수 있습니다.

동작은 다음과 같습니다.

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/> 요소는 구불 구불 강조하고 수집 또는 'BehaviorCollection' 유형의 사전에 추가 할 수 없습니다 오류 에게 유형 'UpdateOnTextChangedBehavior'의 값을보고합니다. 디자이너보기를 보려고하면 디자이너가로드하지 못합니다. 디자이너는을로드하기 전에 수정해야하는 오류가 있습니다.

+1

:

마찬가지로, 하나의 경우 당신은 볼 수 있습니다. 코드 숨김의 텍스트 상자 또는 비헤이비어로 다른 작업을 수행하고 있습니까? –

+0

Dan, 네 말이 맞아. 실제 응용 프로그램에는이 동작 외에도 두 가지 작업이 있으며, 그 중 하나가 리플렉션을 사용하여 종속성 속성 값을 설정하는 메서드를 호출하는 것을 볼 수 있습니다. 아마도 그것이 디자인 타임에 작동하지 못하게하는 원인 일 것입니다. –

답변

1

Silverlight에서는 코드에서 변경 한 내용으로 디자인을로드 할 수 없으면 Silverlight에 버그가 있습니다.

Silverlight는 아직 코드를 통해 여러 가지 예외를 처리하도록 설계되지 않았습니다. 반환 유형이있는 코드가 있고 거기에서 null을 확인하지 않으면 디자이너가이 케이스를 대부분로드하지 않습니다. with IValueConverter 메서드 {x : Static} ... 등등

잘 컴파일되고 예외가 발생하지 않는 이상 코드에 아무런 문제가 없습니다. 디자이너에 대해 걱정하지 마십시오. 새 프로젝트를 시작하고 샘플 코드는 더 디자이너와 VS2010에서 (나를 위해) 잘 작동이나 문제가 혼합 것으로 보인다 복사 http://connect.microsoft.com/VisualStudio/feedback/details/361509/xaml-designer-cannot-handle-typename-with-nested-classes

관련 문제