【问题标题】:UiElement based on another class基于另一个类的 UiElement
【发布时间】:2010-04-20 16:01:07
【问题描述】:

我在网格中放置了一个控件。假设控件派生自公共类“ButBase”,而后者又派生自 System.Windows.Controls.Button。代码通常可以编译并且应用程序工作得很好。但是有一些事情真的很烦人。

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

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

我错过了什么?

【问题讨论】:

    标签: wpf user-controls derived-class uielement


    【解决方案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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 2018-05-22
      • 2011-04-19
      • 2016-01-13
      • 1970-01-01
      相关资源
      最近更新 更多