2017-02-01 4 views
2

WPFプロジェクトのメインウィンドウにpublic staticプロパティ "inDevMode"があります。このプロパティはコマンドに基づいて設定していますアプリケーションを起動するときに行パラメータを設定します。C#WPFメインウィンドウの静的プロパティにApp.xaml.csからアクセスするときにこの奇妙な動作が発生する原因

'Window' does not contain a definition for 'inDevMode' and no extension method 'inDevMode' accepting a first argument of type 'Window' could be found (are you missing a using directive or an assembly reference?)

私は内にあるものを変更する場合は、次の中括弧内の「メインウィンドウ」が(他の二つのタイプの参照がある)、灰色強調表示され、コンパイルするとき、私はこのメッセージを取得されていない

MainWindow mainWindow = new MainWindow(); 
if (startInDevMode) 
{ 
    MainWindow.inDevMode = true; 
} 
mainWindow.Show(); 

静的プロパティにアクセスするとき、私は間違っている知っている(以下のように)インスタンス参照にブレース:

012:

MainWindow mainWindow = new MainWindow(); 
if (startInDevMode) 
{ 
    mainWindow.inDevMode = true; 
} 
mainWindow.Show(); 

は、私はこのエラーを取得します

Member 'MainWindow.inDevMode' cannot be accessed with an instance reference; qualify it with a type name instead

"mainWindow"インスタンスの識別子を "MainWindow"に変更すると、エラーは表示されません。中括弧(「メインウィンドウ」)内

MainWindow MainWindow = new MainWindow(); 
if (startInDevMode) 
{ 
    MainWindow.inDevMode = true; 
} 
MainWindow.Show(); 

と型参照今グレー

答えて

3

メインウィンドウは、Windowを返し、この種無し「inDevMode」性質を持たないApplicationクラスのプロパティです。だからこそあなたは誤りを得る。名前の競合があります。

あなたは、静的プロパティを設定することができるようにするために、名前空間とMainWindowタイプの名前を修飾することができます:

MainWindow mainWindow = new MainWindow(); 
if (startInDevMode) 
{ 
    WpfApplication1.MainWindow.inDevMode = true; 
} 
mainWindow.Show(); 
+0

をしかし、なぜ「メインウィンドウ」名前の競合を解決するには、インスタンスの名前を変更するのでしょうか? – stuicidle

+0

名前 "MainWindow"が突然プロパティではなくスコープ内のローカル変数を参照し、名前解決に成功したためです。非修飾名解決がC#でどのように機能するかについては、次のリンクを参照してください。https://msdn.microsoft.com/en-us/library/aa711882(v=vs.71).aspx – mm8

関連する問題