2010-06-08 6 views
2

FrameworkElement의 ResourceDictionary에서 리소스를 찾으려면 FrameworkElement (예 : Window)에서 FindResource()를 호출하는 것이 좋습니다.FrameworkElement의 FindResource() 메서드가 문자열이 아닌 개체를 수락하는 이유는 무엇입니까?

예를 들어 필자는 새로운 Setter를 스타일에 동적으로 추가하기 위해 코드를 통해 Style에 액세스 할 때 여러 번 사용해 왔습니다. 나는 항상 스타일의 x : Key 값을 FindResource() 메서드에 문자열로 전달합니다. Like ... Style style = w.FindResource("GridDescriptionColumn") as Style;

제 질문은 FindResource()가 type 객체의 인수이며 type string의 인수가 아닌 것으로 나타났습니다. 필자는 FindResource()를 문자열이 아닌 인수로 호출하는 이유를 생각할 때 그럴 수 없습니다. FindResource()를 사용하는 다른 방법을 알지 못할 수도 있습니다.

FindResource()가 객체가 아닌 객체의 매개 변수 유형을 허용하는 이유를 아는 사람이 있습니까? 그렇다면 문자열이 아닌 매개 변수 유형으로 FindResource()를 호출하는 예제는 무엇입니까?

감사합니다.

답변

9

리소스는 키로 모든 개체를 가질 수 있습니다. 코드 뒤에 객체 키가있는 리소스를 추가하는 것은 쉽고 유용 할 수 있습니다. XAML에서는 대부분 문자열을 x:Key으로 사용하고 있습니다. 그러나 키가 문자열이 아니며 문자를 인식하지 않고 사용하는 일반적인 경우가 있습니다.

Stylex:Key이 없으면 TargetType의 모든 인스턴스에 적용됩니다. 그러나 암시적인 키가 추가되었습니다 : TargetType 자체의 유형.

요약하면 자원 섹션에 <Style TargetType="{x:Type Button}" />을 쓰는 것은 <Style TargetType="{x:Type Button}" x:Key="{x:Type Button}" />을 쓰는 것과 완전히 같습니다. 이 리소스를 코드에서 다시 가져 오려면 을 사용하고 Type을 전달하고 string이 아닌 코드를 사용해야합니다.

관련 문제