web-dev-qa-db-ja.com

クラスライブラリがCommandManagerクラスを認識しない

WPFアプリケーションを開発していますが、それらすべてのアプリケーションで同じクラスを再利用して、参照として追加できるようにしたいと考えています。

私の場合、コマンド用のクラスがあります。

public class RelayCommand : ICommand
{
    #region Fields

    readonly Action<object> _execute;
    readonly Predicate<object> _canExecute;

    #endregion // Fields

    #region Constructors

    public RelayCommand(Action<object> execute)
        : this(execute, null)
    {

    }

    public RelayCommand(Action<object> execute, Predicate<object> canExecute)
    {
        if (execute == null)
            throw new ArgumentNullException("execute");

        _execute = execute;
        _canExecute = canExecute;
    }
    #endregion // Constructors

    #region ICommand Members

    public bool CanExecute(object parameter)
    {
        return _canExecute == null ? true : _canExecute(parameter);
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

    public void Execute(object parameter)
    {
        _execute(parameter);
    }

    #endregion // ICommand Members
}

これは私のアプリケーションでは完璧に機能しますが、プロジェクトの参照として追加したいクラスライブラリを作成したい場合、 "CommandManagerがに存在しないため、VisualStudioをビルドできません。現在のコンテキスト」。私の使用法では、次のものがあります(これで十分です)

 using System;
 using System.Windows.Input;

「クラスライブラリプロジェクト」でこれができない理由はありますか?

25
koala

クラスライブラリの「参照」部分に移動し、「参照の追加」を選択します。 「PresentationCore」というアセンブリを探して追加します。

次に、クラスファイルにusingステートメントusing System.Windows.Input;を追加します。

これで、期待どおりにCommandManagerにアクセスできるようになります。

追加するだけです。多くの人がクラスライブラリを作成するときに、「WPFカスタムコントロールライブラリ」を選択してから、「Class1.cs」ファイルを消去します。これは、適切な名前空間をライブラリに自動的に追加するショートカットです。それが良いショートカットか悪いショートカットかは誰の呼びかけでもありますが、私はいつもそれを使用しています。

57
Gayot Fow