В моем 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 хорошо работает. То, что я хочу, должно смочь сослаться на мой экземпляр MyConnection из моего кода C#.
Как это возможно?
Call FindResource («MyConnection»)
( Документы ). Вам нужно будет бросить его к конкретному типу, потому что ресурсы могут быть любыми видом объектом.
Существует также метод Tryfindresource для случаев, когда вы не уверены, будет ли ресурс существовать или нет.
FindResource Поищите словарь ресурсов элемента, а также какие-либо словари ресурсов родительских элементов и ресурсы приложений.
Ресурсы [«MyConnection»] ищет только словарь ресурсов этого элемента.
void Window_Loaded(object sender, RoutedEventArgs args) {
DataConnection dc1 = this.FindResource("MyConnection") as DataConnection;
DataConnection dc2 = this.Resources["MyConnection"] as DataConnection;
}
Документация рекомендует первый подход к нормальному поиску ресурсов, но предоставляет второй подход, когда вы извлекаете ресурсы из «Местоположение из известных ресурсов ... Для того, чтобы избежать возможных характеристик и прилагаемых последствий возможностей выполнения ключа времени выполнения». Ссылка