2010-01-11 109 views
5

在我的XAML中,我聲明瞭一個名爲DataConnection的類的實例,該實例名爲MyConnection。從C#訪問XAML實例化對象#

<Window.Resources> 
     <!-- Create an instance of the DataConnection class called MyConnection --> 
     <!-- The TimeTracker bit comes from the xmlns above --> 
     <TimeTracker:DataConnection x:Key="MyConnection" /> 
     <!-- Define the method which is invoked to obtain our data --> 
     <ObjectDataProvider x:Key="Time" ObjectInstance="{StaticResource ResourceKey=MyConnection}" MethodName="GetTimes" /> 
     <ObjectDataProvider x:Key="Clients" ObjectInstance="{StaticResource ResourceKey=MyConnection}" MethodName="GetClients" /> 
</Window.Resources> 

XAML部件中的所有內容都能正常工作。我想要的是能夠從我的C#代碼中引用MyConnection的實例。

這怎麼可能?

回答

5

致電FindResource("MyConnection")docs)。您需要將其轉換爲特定類型,因爲資源可以是任何類型的對象。

對於不確定資源是否存在的情況,還有一種TryFindResource方法。

5

FindResource將搜索元素的資源字典以及任何父元素的資源字典和應用程序資源。

Resources [「MyConnection」]將只搜索該元素的資源字典。

void Window_Loaded(object sender, RoutedEventArgs args) { 
    DataConnection dc1 = this.FindResource("MyConnection") as DataConnection; 
    DataConnection dc2 = this.Resources["MyConnection"] as DataConnection; 
} 

的文檔建議正常的資源查找與第一種方法,但提供當你從一個「已知的資源字典位置檢索資源,第二個方法......,以避免運行時的性能和範圍的影響密鑰查找「。 link