在我的XAML中,我声明了一个名为DataConnection的类的实例,该实例名为MyConnection。
<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实例。
这怎么可能?
答案 0 :(得分:5)
致电FindResource("MyConnection")
(docs)。您需要将其强制转换为特定类型,因为资源可以是任何类型的对象。
对于您不确定资源是否存在的情况,还有一个TryFindResource方法。
答案 1 :(得分: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