2010-04-20 70 views
0

我将控件放入网格中。假设这个控件是从公共类'ButBase'派生而来的,它是从System.Windows.Controls.Button开始的。代码通常编译和应用程序工作得很好。但是真的很烦人。基于另一个类的UiElement

当您尝试切换到xaml-design选项卡时,它会显示'文档根元素不被视觉设计师支持',这是正常的,我对此完全没问题,但事实是,所有xaml代码被加下划线,VS2010表示:'不能创建一个ButBase的实例',尽管通常编译并能够运行。

我试过VS2008中的相同代码,它表示需要在ButBase中看到一个公共无参数构造函数,甚至在我放置一个它显示相同的错误之后。

我在这里错过了什么?

回答

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; 
     } 
    } 
}