【问题标题】:Access XAML Instantiated Object from C#从 C# 访问 XAML 实例化对象
【发布时间】:2011-01-03 14:37:55
【问题描述】:

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

这怎么可能?

【问题讨论】:

    标签: c# wpf oop xaml


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多