什么';s DesignerProperties.IsInDesignMode和DesignerPropartie

本文关键字:IsInDesignMode DesignerPropartie DesignerProperties 什么 | 更新日期: 2023-09-27 18:20:15

DesignerProperties公开了与GetIsInDesignMode(element)IsInDesignTool类似的两种设计状态。

  • 它们之间有什么区别
  • 为什么我应该使用其中一个而不是另一个

什么';s DesignerProperties.IsInDesignMode和DesignerPropartie

快速谷歌搜索显示IsInDesignTool似乎适用于Silverlight和ExpressionBlend。因此,也许IsInDesignMode是用于VS的,但其他VS则需要IsInDesignTool。

它们完全相同

IsInDesignTool
"如果元素在设计器的上下文中运行,则为true;否则为false"IsInDesignTool 的MDSDN

GetIsInDesignMode(元素)
"元素的IsInDesignMode属性值"GetIsInDesignMode(元素)的MDSDN

然而,Visual Studio每一次都会失败

DesignerProperties.GetIsInDesignMode(this)

所以最好使用

return DesignerProperties.GetIsInDesignMode(this) || DesignerProperties.IsInDesignTool;

如果你不想它崩溃。

用于Silverlight的.Net反射器

public static bool GetIsInDesignMode(DependencyObject element)
{
    if (element == null)
    {
        throw new ArgumentNullException("element");
    }
    bool flag = false;
    if (Application.Current.RootVisual != null)
    {
        flag = (bool) Application.Current.RootVisual.GetValue(IsInDesignModeProperty);
    }
    return flag;
}

public static bool IsInDesignTool
{
    get
    {
        return isInDesignTool;
    }
    [SecurityCritical]
    set
    {
        isInDesignTool = value;
    }
}
internal static bool InternalIsInDesignMode
{
    [CompilerGenerated]
    get
    {
        return <InternalIsInDesignMode>k__BackingField;
    }
    [CompilerGenerated]
    set
    {
        <InternalIsInDesignMode>k__BackingField = value;
    }
}