2010-07-20 2 views
0

어떤 의미에서 XAML 리소스가 정적입니까?XAML 정적 리소스에 대한 "정적"은 정확히 무엇입니까?

XAML은 리소스 블록에서 선언 된 내용을 의미하고 {StaticResource resource-name} 구문을 사용하여 액세스합니다.

페이지 리소스는 페이지 클래스에서 정적 멤버 인 것처럼 동작합니다. 또는 페이지 클래스의 인스턴스를 여러 개 만들었습니까? 여러 리소스 인스턴스를 얻을 수 있습니까?

명명 규칙은 리소스가 정적 멤버처럼 처리된다는 것을 의미하며 페이지의 여러 인스턴스가 공통 리소스 집합을 공유 함을 의미합니다.

어떤 동작이 나타 납니까?


실제 답변은 수락 된 응답에 대한 의견입니다. 중요한 부분은 this link입니다.

답변

1

C#의 정적 유형과 공통점이 없습니다.

StaticResource를 사용하면 처음 액세스 할 때 (즉, 컴파일 타임에 없음) 리소스를 한 번 평가합니다.

리소스가 필요할 때마다 DynamicResource가 평가됩니다.

또한 컴파일러는 동적 또는 정적 리소스를 전혀 평가하지 않습니다.

+0

예, 저는 XAML이 런타임에 효과적으로 해석된다는 것을 알고 있습니다. 내가 발견하고자하는 것은 페이지 클래스의 인스턴스를 여러 개 만들면 여러 리소스 인스턴스를 얻을 수 있는지 여부입니다.명명법은 생성 된 백업 클래스가 정적 멤버와 같은 리소스를 처리한다는 것을 의미합니다. 이는 페이지의 여러 인스턴스가 공통 리소스 세트를 공유한다는 것을 의미합니다. –

+0

StaticResource는 단일 공유 인스턴스 여야합니다. 여기를 참조하십시오 : http://msdn.microsoft.com/en-us/library/bb613559.aspx –

+0

참조는 정확하게 내가 찾는 대답입니다. 그러나 다시 읽으면 단일 공유 인스턴스가 아니라고합니다. 정적 정적. 나는 그들이 "선언적으로 표현했다"는 것을 정말로 의미했다고 생각하지만 그것이 약간 길다는 것을 느꼈다. –

1

리소스 사전의 복사본은 리소스 사전을 정의하는 각 WPF 엔터티와 함께 ​​만들어집니다. 프로그래밍 언어의 정적 정의는 여기에 적용되지 않습니다. 우리는 애플리케이션 ResourceDictionary에 정의 개의 브러쉬 두 CustomerWindow 브러쉬 및 다른 두 CustomerListControl이이 샘플 애플리케이션에서는

 
Application 
|-ResourceDictionary 
    |-Brush1 
    |-Brush2 
|-CustomerWindow   x3 
    |-ResourceDictionary 
    |-Brush3 
    |-Brush4 
    |-CustomerListControl x2 
    |-ResourceDictionary 
     |-Brush5 
     |-Brush6 

: 여기

는 일례이다. CustomerWindow에는 CustomerListControl의 두 인스턴스가 있고 세 개의 창이 열려 있습니다. 1 배 (한 응용 프로그램)
Brush2 - - 1 배
Brush3 - 배 (세 개의 창 열림)
Brush4가 - (6 배 -
Brush5 3 배

Brush1을 다음 리소스를 인스턴스화됩니다 총

세 개의 창 * 창 당 두 개의 컨트롤)
Brush6 - 6x

리소스 사용이 염려되면 최상위 수준에서 리소스를 정의해야합니다. 따라서이 시나리오에서 모든 브러시가 응용 프로그램 수준에서 정의 된 경우 몇 개의 창이 열려 있더라도 하나의 인스턴스 만 존재하게됩니다.

MSDN article WPF 성능을 최적화하는 것은 가치가 있습니다.

+0

감사합니다. 불행하게도 David는 먼저 거기에 도착했습니다. –

관련 문제