2009-07-22 5 views
30

새 WPF 응용 프로그램 또는 WPF 사용자 정의 컨트롤 라이브러리를 만들 때마다 AssemblyInfo.cs 파일에는 다음 특성이 포함됩니다.ThemeInfo 속성은 무엇입니까?

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, 
    //where theme specific resource dictionaries are located 
    //(used if a resource is not found in the page, 
    // or application resource dictionaries) 
    ResourceDictionaryLocation.SourceAssembly 
    //where the generic resource dictionary is located 
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries) 
)] 

ThemeInfo 특성은 무엇입니까? 제거하면 아무 것도 부러 뜨릴 수 있습니까?

+1

남자, 나는 이것을 우연히 만났습니다! 빌드하고 다른 프로젝트로 이동 한 사용자 지정 BaseView로 인해 빈/검은 색 창이 나타납니다. 이걸 고정 추가! – Heliac

답변

16

ThemeInfo 속성은 자동 테마 메커니즘이 테마 ​​사전과 일반 사전을 찾는 위치를 지정합니다. 각 옵션은 다음 값 중 하나로 설정할 수 있습니다.

  • 없음 (기본값) : 자원 사전을 찾지 마십시오.
  • SourceAssembly : 사전은 현재 어셈블리입니다.
  • ExternalAssembly : 사전은 다른 어셈블리에 있으며, 이름은 <AssemblyName>.<ThemeName>.dll이어야합니다. 여기서 <AssemblyName>은 현재 어셈블리의 이름입니다.

테마 사전 예를 들어, 외부 어셈블리에 정의 된 컨트롤에 대한 스타일을 지정하는 경우는 WPF는 System.Windows.Controls.ProgressBarSystem.Windows.Button로, 다음 테마 사전의 소스로 응용 프로그램을 지정합니다 ThemeDictionaryExtension를 사용해야 제어 .

+4

하지만 그게 무슨 뜻입니까? "주제 사전"이란 무엇입니까? "일반 사전"이란 무엇입니까? 그들을 위해 무엇입니까? 그것들은 중요합니까? 그리고 제가 질문에서 물어 보았 듯이, 속성을 제거하면 어떤 것도 깨뜨릴 수 있습니까? –

+0

컨트롤에서 generic.xaml의 테마를 가져 가지 않는다는 것을 알면 알 수 있듯이 일반적인 테마를 검색 할 위치는 –

+1

입니다. 감사합니다! 나는 테마 정의 스타일을 외부에서 정의 된 컨트롤에 적용하려고 미쳐 버렸습니다. 'ThemeDictionaryExtension'에 대해서는 전혀 몰랐습니다. 일단 내가 그것을 추가하면 모든 것이 마쳤습니다! 다시 한 번 감사드립니다! –

5

WPF 프레임 워크는 컨트롤 라이브러리에서이 특성을 사용하여 컨트롤에 리소스를 적용하는 편리한 방법입니다.

Windows는 다양한 UI 테마로 실행될 수 있습니다 (Aero는 그러한 예입니다). Microsoft에서 제공하는 WPF 컨트롤은 다양한 환경 테마에 맞게 모양을 변경합니다.

응용 프로그램에서이 동작이 필요한 경우 컨트롤 라이브러리 프로젝트의 themes 폴더에 다른 테마 사전을 만들 수 있습니다.

다중 테마 지원이 필요하지 않은 경우에도 어셈블리의 컨트롤에서 액세스 할 수 있도록 generic.xaml 파일에 리소스를 넣는 것이 편리합니다. 아마도 요소 (컨트롤)는 .xaml 부분 클래스가없는 .cs 파일에 정의되어 있고 필요한 리소스를 저장할 어딘가에 있거나 동일한 프로젝트의 여러 WPF 요소간에 리소스가 공유 될 가능성이 있습니다 (예 : 어셈블리.

여기서 언급하는 속성은 이러한 리소스 매핑을위한 메타 데이터입니다.

+0

그래서 Button과 같은 표준 테마 컨트롤을 사용하고 있다면 속성이 필요하지 않습니까? (A) Aero vs Luna 등에서 다르게 보일 필요가있는 처음부터 내 컨트롤을 작성하거나 (b) 제 어셈블리에 generic.xaml 파일이있는 경우에만 필요합니다. 그리고 그 경우에 기본값이 작동하지 않고 속성이 필요합니까? –

+0

네, 여기 제대로 된 것 같습니다.하지만 저는 자신의 컨트롤에 대해 말하고있는 것처럼 '기본'리소스가 없습니다. 'generic.xaml'파일을 통해 도착한 유일한 기본값입니다. 해당 사전의 리소스는 테마 별 리소스 사전 항목이있을 경우이를 무시합니다. –