2010-08-24 66 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/>元件被突出顯示與波浪和報告錯誤類型「UpdateOnTextChangedBehavior」的值不能被添加到集合或類型「BehaviorCollection」的字典。當試圖在設計視圖中查看設計器無法加載時,聲明該文檔包含必須在加載設計器之前修復的錯誤

+1

開始一個新項目,並複製你的示例代碼似乎VS2010工作的罰款(對我來說),沒有設計師或混合的問題。你是否在代碼隱藏中使用TextBox或行爲做其他事情? – 2010-08-24 15:56:24

+0

丹,看起來你是對的。在真實應用程序中,除了這種行爲之外,還有兩個動作,我看到其中一個動作是調用一個使用反射來設置依賴項屬性值的方法。也許這就是阻止它在設計時工作的原因。 – 2010-08-25 07:48:07

回答

1

在Silverlight中,如果設計無法加載我們在代碼中所做的更改,那麼它是Silverlight中的錯誤。

Silverlight尚未設計爲通過代碼處理各種異常,例如,如果您確實有任何返回類型的代碼,並且您沒有在那裏檢查null,那麼它不會加載設計器,這種情況大多數情況下是可見的重寫IValueConverter方法{x:Static} ...等等

你的代碼沒有什麼不對,除非它編譯好並且不會拋出異常。 不要擔心設計師。

同樣,一個情況下,你可以看看: http://connect.microsoft.com/VisualStudio/feedback/details/361509/xaml-designer-cannot-handle-typename-with-nested-classes