从C#访问XAML实例化对象

Rya*_*yan 5 c# oop wpf 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>
Run Code Online (Sandbox Code Playgroud)

XAML部分中的所有内容都可以正常工作.我想要的是能够从我的C#代码引用我的MyConnection实例.

怎么可能?

ito*_*son 5

致电FindResource("MyConnection")(docs).您需要将其强制转换为特定类型,因为资源可以是任何类型的对象.

对于您不确定资源是否存在的情况,还有一个TryFindResource方法.


Jos*_*osh 5

FindResource将搜索元素的资源字典以及任何父元素的资源字典和应用程序资源.

资源 ["MyConnection"]将仅搜索该元素的资源字典.

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

文档推荐了第一种常规资源查找方法,但提供了第二种方法,用于从"已知资源字典位置检索资源...以避免运行时密钥查找可能的性能和范围影响".链接