2017-02-01 19 views
2

在WPF主窗口中訪問靜態屬性時,是什麼原因造成這種奇怪的行爲我有我的WPF項目,我設置該屬性的主窗口中的公共靜態屬性「inDevMode」基於命令在啓動應用程序時行參數。C#從App.xaml.cs

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

的「主窗口」花括號內沒有突出顯示灰色(其中其他兩個類型的引用),當編譯我得到這個消息:

'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(); 

我得到這個錯誤:

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

但是,如果我改變「主窗口」實例「主窗口」的標識,如下然後我沒有得到任何錯誤?

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

和花括號(「主窗口」)中的類型。現在參考灰

回答

3

主窗口是Application類返回一個Window的一個屬性,這種類型的沒有「inDevMode」屬性。這就是你得到錯誤的原因。你有一個命名衝突。

你可以爲了限定MainWindow類型與命名空間的名稱可以設置靜態屬性:

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

但爲什麼會重命名實例「主窗口」解決命名衝突? – stuicidle

+0

因爲那時的名稱爲「主窗口」突然指的是局部變量是在範圍上,而不是屬性,然後名稱解析成功。請參考以下鏈接瞭解不合格的名稱解析在C#中如何運作的更多信息:https://msdn.microsoft.com/en-us/library/aa711882(v=vs.71).aspx。 – mm8

相關問題