2010-01-11 15 views
5

En mi XAML declaro una instancia de una clase llamada DataConnection, la instancia se denomina MyConnection.Objeto instanciado XAML de acceso desde C#

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

Todo en la parte XAML funciona bien. Lo que quiero es poder hacer referencia a mi instancia de MyConnection desde mi código C#.

¿Cómo es eso posible?

Respuesta

5

Llamada FindResource("MyConnection") (docs). Tendrá que convertirlo al tipo específico porque los recursos pueden ser cualquier tipo de objeto.

También hay un método TryFindResource para casos en los que no está seguro de si el recurso existirá o no.

5

FindResource buscará el diccionario de recursos del elemento, así como los diccionarios de recursos de los elementos principales y los recursos de la aplicación.

Resources ["MyConnection"] buscará solo el diccionario de recursos de ese elemento.

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

La documentación recomienda el primer enfoque para búsquedas de recursos normales, pero proporciona el segundo enfoque para cuando va a recuperar recursos desde una "ubicación conocida diccionario de recursos ... para evitar las posibles consecuencias en el rendimiento y el alcance de tiempo de ejecución búsqueda clave ". link

Cuestiones relacionadas