WPF UserControl DesignMode属性(在WinForm上托管)

时间:2010-11-05 15:09:51

标签: wpf designer

我在自定义WPF UserControl上搜索DesignMode布尔值... 正确如何促使它?

我在WinForm中托管了WPF控件 。我看到“DesignerProperties”类在这种情况下不起作用。

我在构造函数中有一些逻辑在设计模式中抛出异常并想跳过该代码,因为我没有到达设计器中看到带有UserControl的Form。

我试过

private static bool? _isInDesignMode;

/// <summary>
/// Gets a value indicating whether the control is in design mode 
/// (running in Blend or Visual Studio).
/// </summary>
public static bool IsInDesignModeStatic
{
    get
    {
        if (!_isInDesignMode.HasValue)
        {
#if SILVERLIGHT
    _isInDesignMode = DesignerProperties.IsInDesignTool;
#else
            var prop = DesignerProperties.IsInDesignModeProperty;
            _isInDesignMode
                = (bool)DependencyPropertyDescriptor
                .FromProperty(prop, typeof(FrameworkElement))
                .Metadata.DefaultValue;
#endif
        }

        return _isInDesignMode.Value;
    }
}

但这不起作用:((我在IsInDesignModeStatic代码行的“阻止”中看到设计器异常......

2 个答案:

答案 0 :(得分:2)

我用它来检测DesignMode(我的WPF控件在类库中定义)。

    ' Exit here if in Design Mode
    If Assembly.GetEntryAssembly() Is Nothing Then Exit Sub

如果它不是什么都可以检查Assembly.GetEntryAssembly.FullName.ToString,并确定控件的初始化位置。

当控件在WinForms中托管时,DesignerProperties.IsInDesignModeProperty为我返回null,因为WPF不知道那里有设计师。

史蒂夫

答案 1 :(得分:1)

试试这个

    if (DesignerProperties.GetIsInDesignMode(this/*this user control*/))
    {
        // Design-mode specific functionality
    }