gpt4 book ai didi

c# - 使用 vb.net 声明一个 IsInDesignMode 属性以在 wpf 中使用

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:45 25 4
gpt4 key购买 nike

在他的一篇博文中,Laurent Bugnion 演示了以下代码片段作为检测 wpf 的设计时间模式的方法

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

因为我碰巧在 VB 中工作,所以我开始使用 Telerik 的在线代码转换器来翻译它并最终得到以下结果:

Private Shared _isInDesignMode As System.Nullable(Of Boolean)

''' <summary>
''' Gets a value indicating whether the control is in design mode (running in Blend
''' or Visual Studio).
''' </summary>
Public Shared ReadOnly Property IsInDesignModeStatic() As Boolean
Get
If Not _isInDesignMode.HasValue Then
#If SILVERLIGHT Then
_isInDesignMode = DesignerProperties.IsInDesignTool
#Else
Dim prop = DesignerProperties.IsInDesignModeProperty
#End If
_isInDesignMode = CBool(DependencyPropertyDescriptor.FromProperty(prop, GetType(FrameworkElement)).Metadata.DefaultValue)
End If

Return _isInDesignMode.Value
End Get
End Property

但是,如果打开 Option Strict On(默认情况下我会这样做),则无法编译,指出 system.windows.DependencyProperty 和 system.ComponentModel.DependencyProperty 之间存在差异。

大多数代码转换器抛出的错误我通常都能在最后修复,但这个错误(可能是因为整个 wpf 对我来说很新)给我带来了问题。

任何人都可以解释错误的根本原因(以便我可以主动理解它)并可能提供更正的 vb 转换。

谢谢

最佳答案

好吧,以下似乎有效:

Private Shared _isInDesignMode As System.Nullable(Of Boolean)

Public Shared ReadOnly Property IsInDesignMode() As Boolean
Get
Dim prop As DependencyProperty
If Not _isInDesignMode.HasValue Then
#If SILVERLIGHT Then
_isInDesignMode = DesignerProperties.IsInDesignTool
#Else
prop = DesignerProperties.IsInDesignModeProperty
#End If
_isInDesignMode = CBool(DependencyPropertyDescriptor.FromProperty(prop, GetType(FrameworkElement)).Metadata.DefaultValue)
End If

Return _isInDesignMode.Value
End Get
End Property

有两点值得注意。

  1. 可能是 Laurent 的原始博客中存在拼写错误,因为私有(private)和公共(public)静态声明之间存在不匹配(尽管 intellisense 似乎并未对此提出异议!)。也许那是 C# 的事情,我对 C# 的了解还不够多,无法对此发表评论。
  2. Option Strict On 要求使用 AS 语句声明变量。 prop 被声明为 system.windows.DependencyProperty,但被分配为 system.cComponentModel.DependencyProperty。编译器似乎并没有像这样反对它。我一点也不知道为什么。

如果你们中任何一个更清楚地了解 C# 和 VB 之间的区别的人可以对此有所了解,我很乐意知道为什么它有效,而不是仅仅接受它似乎有效。

关于c# - 使用 vb.net 声明一个 IsInDesignMode 属性以在 wpf 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26298179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com