2010-04-20 71 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; 
     } 
    } 
}