2013-10-23 75 views
0

我試圖從另一個窗口訪問某些控件(ScrollViewer中和網格)。我嘗試這樣做:Application.Current.Windows.Cast <Window>()返回null

var reportW = Application.Current.Windows.Cast<Window>().SingleOrDefault(window => window is ReportWindow) as ReportWindow; 
ScrollViewer myScrollViewer = reportW.testScrollViewer; 
Grid myGrid = reportW.Grd; 

問題是,reportW是百達null。我的方法有問題嗎?還有其他方法可以從另一個窗口訪問控件嗎?

+1

您的Windows都不是類型'ReportWindow'。請注意,這種模式的幾乎所有用途都是糟糕的設計。而不是通過所有打開的窗口找你應與窗戶之間更直接的關係來進行通信的給定類型的窗口。賠率是在像這樣的類型應該是返回一個值或觸發一個事件使得該窗口可以根據提供給它的信息更新自身的情況。 – Servy

回答

2

試試這個:

ReportWindow reportW = Application.Current.Windows.OfType<ReportWindow>(). 
SingleOrDefault(); 
+0

仍然是同樣的問題。我無法弄清楚什麼是錯的。 – Stojdza

+1

我會@Servy同意,如果這條線以上的回報'null',那麼你有沒有'類型的'Window's ReportWindow'開放。你確定'ReportWindow'是正確的類型嗎? – Sheridan

+0

玉以及我找到了解決方案,但並沒有意識到,我的窗口必須打開。所以這種方法將不會起作用。但我需要訪問我的窗口的控制而不打開它。這可能嗎?? – Stojdza