从C#访问XAML实例化对象

时间:2010-01-11 01:28:09

标签: c# wpf oop xaml

在我的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实例。

这怎么可能?

2 个答案:

答案 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