2010-01-11 7 views
5

XAML에서 DataConnection이라는 클래스의 인스턴스를 선언하면 인스턴스의 이름이 MyConnection이됩니다.C#의 XAML 인스턴스화 된 개체에 액세스

<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 부분의 모든 것이 정상적으로 작동합니다. 내가 원한다면 My C# 코드에서 MyConnection의 인스턴스를 참조 할 수 있어야합니다.

어떻게 가능합니까?

답변

5

FindResource("MyConnection") (docs)으로 전화하십시오. 리소스는 모든 종류의 객체가 될 수 있으므로 특정 유형으로 캐스팅해야합니다.

리소스가 존재하는지 여부가 확실하지 않은 경우 TryFindResource 메서드가 있습니다.

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

관련 문제