我的项目找不到构造函数,即使我看到它明确定义了吗?

时间:2014-05-18 23:49:15

标签: c# wpf mahapps.metro

无论出于何种原因,下面代码中的最后一行都抱怨没有找到包含2个参数的InputDialog的构造函数。

using MahApps.Metro.Controls;
using MahApps.Metro.Controls.Dialogs;

namespace order
{
    public static class DialogManager
    {
        public static Task<string> ShowInputAsync(this MetroWindow window, string title, string message, MetroDialogSettings settings = null)
        {
            window.Dispatcher.VerifyAccess();
            return HandleOverlayOnShow(settings, window).ContinueWith(z =>
            {
                return (Task<string>)window.Dispatcher.Invoke(new Func<Task<string>>(() =>
                {
                    if (settings == null)
                        settings = window.MetroDialogOptions;

                    //create the dialog control
                    InputDialog dialog = new InputDialog(window, settings); // error: does not contain a constructor With 2 arguments

我检查了InputDialog的代码,发现了这个:

namespace MahApps.Metro.Controls.Dialogs
{
    public partial class InputDialog : BaseMetroDialog
    {
        internal InputDialog(MetroWindow parentWindow)
            : this(parentWindow, null)
        {
        }
        internal InputDialog(MetroWindow parentWindow, MetroDialogSettings settings)
            : base(parentWindow, settings)
        {
            InitializeComponent();
        }

显然,该类具有正确的名称,以及具有2个参数和正确类型的正确构造函数。那么是什么给出了错误?

我本质上是试图改进找到的here代码,以获得一个验证对话框,要求使用密码Box的4-6位数字引脚。由于我不应该更改MaHapps Metro代码,因此我复制并尝试修改代码以满足我的需求。

1 个答案:

答案 0 :(得分:1)

InputDialog的构造函数的访问修饰符必须为public,而不是internal

http://msdn.microsoft.com/en-us/library/7c5ka91b.aspx

Practical uses for the "internal" keyword in C#

修饰符internal表示只能在同一个程序集中的文件中访问它

修饰符public表示任何其他可以引用InputDialog

的类都可以访问它