2011-06-02 18 views
0

我的解決方案編譯得很好,沒有錯誤,但是當我運行我的Silverlight項目時出現此錯誤:在'TextBoxKeyUp'類型中未找到可附加屬性'Command'。我在過去創造了成功的行爲,而且這個行爲的代碼相對來說不重要。Prism AttachedProperty命令在運行時未找到

XAML代碼片段:

 xmlns:prismCmd="clr-namespace:AGMGUI.Infrastructure.AttachedProperty;assembly=AGMGUI.Infrastructure" 

      <TextBox Grid.Column="2" Text="{Binding InputFieldText, Mode=TwoWay}" 
       TabIndex="1" Width="100" Height="24" HorizontalAlignment="Left" 
       VerticalAlignment="Center" prismCmd:TextBoxKeyUp.Command="{Binding KeyUpCommand}"></TextBox> 

附加屬性:

public static class TextBoxKeyUp 
{ 

    #region Command attached property 
    public static ICommand GetCommand(DependencyObject obj) 
    { 
     return (ICommand)obj.GetValue(CommandProperty); 
    } 

    public static void SetCommand(DependencyObject obj, ICommand value) 
    { 
     obj.SetValue(CommandProperty, value); 
    } 

    // Using a DependencyProperty as the backing store for Command. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty CommandProperty = 
     DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(TextBoxKeyUp), new PropertyMetadata(OnSetCommandCallback)); 

    private static void OnSetCommandCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) 
    { 
     TextBox element = dependencyObject as TextBox; 
     if (element != null) 
     { 
      TextBoxKeyUpBehavior behavior = GetOrCreateBehavior(element); 
      behavior.Command = e.NewValue as ICommand; 
     } 
    } 
    private static TextBoxKeyUpBehavior GetOrCreateBehavior(TextBox element) 
    { 
     TextBoxKeyUpBehavior behavior = element.GetValue(KeyUpBehaviorProperty) as TextBoxKeyUpBehavior; 
     if (behavior == null) 
     { 
      behavior = new TextBoxKeyUpBehavior(element); 
      element.SetValue(KeyUpBehaviorProperty, behavior); 
     } 
     return behavior; 
    } 
    #endregion 

    #region KeyUpBehavior attached property 
    public static TextBoxKeyUpBehavior GetKeyUpBehavior(DependencyObject obj) 
    { 
     return (TextBoxKeyUpBehavior)obj.GetValue(KeyUpBehaviorProperty); 
    } 

    public static void SetKeyUpBehavior(DependencyObject obj, TextBoxKeyUpBehavior value) 
    { 
     obj.SetValue(KeyUpBehaviorProperty, value); 
    } 

    public static readonly DependencyProperty KeyUpBehaviorProperty = 
     DependencyProperty.RegisterAttached("KeyUpBehavior", typeof(TextBoxKeyUpBehavior), typeof(TextBoxKeyUp), null); 
    #endregion 

    #region CommandParameter attached property 
    public static object GetCommandParameter(DependencyObject obj) 
    { 
     return (object)obj.GetValue(CommandParameterProperty); 
    } 

    public static void SetCommandParameter(DependencyObject obj, object value) 
    { 
     obj.SetValue(CommandParameterProperty, value); 
    } 

    public static readonly DependencyProperty CommandParameterProperty = 
     DependencyProperty.RegisterAttached("CommandParameter", typeof(object), typeof(TextBoxKeyUp), new PropertyMetadata(OnSetCommandParameterCallback)); 

    private static void OnSetCommandParameterCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) 
    { 
     TextBox element = dependencyObject as TextBox; 
     if (element != null) 
     { 
      TextBoxKeyUpBehavior behavior = GetOrCreateBehavior(element); 
      behavior.CommandParameter = e.NewValue; 
     } 
    } 
    #endregion 
} 

有沒有人遇到過這個錯誤?

+0

作爲測試,請嘗試將「命令」重命名爲「MyCommand」。我有一個偷偷摸摸的命令可能被保留。 – 2011-06-24 08:18:05

回答

2

我發現我的shell項目不包含對我有AttachedProperty類的項目的引用。一旦我添加了參考,它就像一個魅力。