2012-12-16 1 views
15

MSDN says on event setters:EventSetters는

이벤트 호텔은 테마 리소스 사전에 포함 된 스타일로 사용할 수 없습니다. 이는 런타임에 테마 리소스 사전이 종종 느슨한 이진 XAML (BAML) 파일이기 때문에 처리기를 정의하는 코드 숨김이있을 수있는 범위가 정의되어 있지 않기 때문입니다. 상태

이것은 the first answer to this SO question에 의해 확인된다 :

리소스 XAML 파일 뒤에 코드를 가질 수는, 그들은 일반적으로 "느슨한 XAML"라고합니다. 당신은 그것에 대해 msdn EventSetter에 대해 읽을 수 있습니다.

그러나 아직 이벤트 설정자에 대한 제한 사항을 이해하지 못했습니다. 리소스 사전에 코드 숨김 파일을 사용하려고했습니다. 해당 리소스 사전의 스타일 내에서 정의 된 템플릿 내에 포함 된 컨트롤 이벤트에 대한 이벤트 처리기를 할당했습니다.

같은 리소스 딕셔너리의 스타일에 이벤트 설정기를 추가하면 예외가 발생합니다.

작동하는 특별한 경우를 맞았습니까?

또는 템플릿의 이벤트 처리기를 설정하는 것이 항상 효과가 있습니까? 그렇다면 동일한 리소스 사전의 스타일로 이벤트 설정기를 사용할 수없는 이유는 무엇입니까?

내 질문에 귀결 :

정확히 테마 리소스 사전이 자주 느슨해 진 XAML 것을 MSDN의 말의 의미는 무엇

- 얼마나 자주, 정확히 무슨 상황?

+0

테마 리소스 사전에 codebehind를 사용하셨습니까? –

+0

@ voroninp : 예; 참조 "나는 리소스 딕셔너리를위한 코드 숨김 파일을 사용해 보았습니다." –

+0

ResourceDictionary는 코드 숨김을 가질 수 있습니다.이 접근 방식은 MacDonald의 저서 [C# 2010의 Pro WPF]에 설명되어 있습니다. 사용하지 않는 스타일 이벤트 집합은 디자인에 불과하다고 생각하지만 그 이유는 무엇입니까? –

답변

2

이는 코드가 뒤에 있거나 네임 스페이스 내에 컴파일되지 않는다는 것을 의미합니다.

또 다른 방법은 느슨한 xaml 파일에 코드 부분이 없다는 것입니다. 예를 들어 데이터베이스에서 텍스트로 읽거나 텍스트로 작성하여 코드화 된 연관없이로드 할 수 있습니다.

기상 조건은 타당한 이유입니다. 그것은 각 개발자에게 달려 있지만 이는 xaml이 느슨한 것을 의미합니다.

편집 :

귀하의 코멘트에 대한 응답으로

, 나는이 가장 일반적인 "느슨한 파일"이기 때문에 그들은 특히 자원과 스타일을 참조하고, 일반적으로 대부분의 사람들이 코드 파일을 백업하지 않는 상상 . 개인적으로 나는 그것을 밖으로 대처하는 것으로 본다. Loose = True 속성을 쉽게 추가하여이 문제를 해결할 수있었습니다.

현실적으로 문제는 느슨한 파일이나 사용 빈도가 아니기 때문에 누락 된 기능을 보완하는 규칙이 있다는 사실과 관련이 있습니다. x, y, z를 할 수 없다고 말하면 훨씬 쉬울 것입니다. 왜냐하면 우리가 x = y, z를 임의로 몇 개의 xaml 파일이 있기 때문에 지원하지 않기 때문입니다.

+0

죄송합니다. 아마도 질문은 불분명 함 - XAML *이 무엇을 의미하는지 알고 있습니다. 제 질문은 * 자주 *라는 단어에 관한 것입니다. 인용 된 문맥에서 * 종종 * 의미하는 것은 무엇입니까? 즉, 정확하게는? –

+0

TL을 추가했습니다. 경찰이 .. – McDonnellDean