在运行时找不到Prism附加属性命令

时间:2011-06-02 21:35:39

标签: silverlight prism

我的解决方案编译良好,没有错误,但是当我运行我的Silverlight项目时,我收到此错误:在'TextBoxKeyUp'类型中找不到可附加属性'Command'。我在过去创造了成功的行为,而这个行为的代码相对简单。

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
}

以前是否有人遇到此错误?

1 个答案:

答案 0 :(得分:2)

我发现我的shell项目没有包含对我有AttachedProperty类的项目的引用。一旦我添加了参考,它就像一个魅力。