UiElement基于另一个类

时间:2010-04-20 16:01:08

标签: wpf user-controls derived-class uielement

我将控件放入网格中。让我们说控件是从公共类'ButBase'派生而来的,它是从System.Windows.Controls.Button派生的。代码通常编译和应用程序工作得很好。但是有些东西真的很烦人。

当你尝试切换到xaml-design选项卡时,它会说“视觉设计师不支持文档根元素”,这是正常的,我对此完全没问题,但问题是,所有的xaml代码带有下划线,VS2010说:'无法创建ButBase的实例',尽管通常仍然可以编译并且能够运行。

我在VS2008中尝试过相同的代码,它说需要在ButBase中看到一个公共的无参数构造函数,即使我把它放在一个它显示相同的错误。

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

确保ButBase不是abstract。设计师不喜欢这些。

另外,请确保不要在构造函数InitializedLoaded处理程序中执行任何有趣的业务。搞笑包括任何非平凡的任务,例如连接到数据库或可能干扰设计者的任何其他任务。任何这样的代码都应该用设计师检查包装。有很多方法可以检查设计师的存在,但我发现以下工作正常:

internal static class DesignModeChecker
{
    private static bool? _isInDesignModePriv;

    public static bool IsInDesignMode
    {
        get
        {
            if (!_isInDesignModePriv.HasValue)
            {
                _isInDesignModePriv = Process.GetCurrentProcess().ProcessName.ToLower().Trim() == "devenv" && !Debugger.IsAttached;
            }

            return _isInDesignModePriv.Value;
        }
    }
}