2014-10-10 62 views
2

在他的博客文章的一個聲明的IsInDesignMode物業在WPF應用洛朗比尼翁展示了下面的代碼片段作爲檢測desingtime模式爲WPF用vb.net

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 

但是,如果一個人在選項嚴格上(這是我在默認情況下做到這一點無法編譯指出存在system.windows.Dependency之間的差異屬性和system.ComponentModel.DependencyProperty等等。

大多數的錯誤,代碼轉換器扔了我通常可以解決到底,但這個(可能因爲整個WPF的事情是很新的給我)的引起了我的問題。

任何人都可以解釋錯誤的根本原因(這樣我可以積極地理解它),並可能提供校正VB轉換。

謝謝

回答

1

好以下似乎工作:

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的博客原文筆誤,因爲是私人和公共靜態聲明之間的不匹配(雖然智能感知似乎並沒有提出異議的!)。也許這是一個C#的東西,我不知道C#能夠對此發表評論。
  2. Option Strict On要求使用AS語句聲明變量。 prop被聲明爲system.windows.DependencyProperty,但被分配爲system.cComponentModel.DependencyProperty。編譯器似乎沒有像這樣反對它。我不明白爲什麼。

如果您對C#和VB之間的差異有更清楚的把握,可以對此有所瞭解,我會很樂意知道這是爲什麼起作用,而不是僅僅接受它似乎可行。