2010-01-18 4 views
5

몇 달 전 sharing resource dictionaries across assemblies에 대한 질문을 게시했습니다. 구성 요소 자원 키 마크 업 확장을 사용하여이를 수행 할 수 있습니다. 그 당시에는 일반 클래스 라이브러리 프로젝트가 아닌 WPF Custom Control 프로젝트에서만 작업 할 수있었습니다.WPF 사용자 지정 컨트롤 라이브러리와 일반 클래스 라이브러리의 차이점은 무엇입니까?

이제 공유 리소스 사전을 호스팅하기 위해 기존의 일반 클래스 라이브러리 프로젝트를 사용해야합니다. 즉, 구성 요소 리소스 키 마크 업 확장을 지원하기 위해 클래스 라이브러리 프로젝트를 개조해야합니다. PresentationCore, PresentationFramework 및 WindowsBase에 대한 참조뿐만 아니라 Themes 폴더와 Generic.xaml 리소스 사전 문서를 클래스 라이브러리 프로젝트에 추가했습니다. 불행히도, 그 트릭을하지 않는 것.

그래서, 여기 내 질문 : 위의 이외의 WPF 사용자 지정 컨트롤 라이브러리 프로젝트 않는 일반 클래스 라이브러리 프로젝트 있지? 다른 말로하면,이 기능을 작동시키기 위해 클래스 라이브러리 프로젝트에 추가 할 수있는 것은 무엇입니까? 감사.

+0

구성 요소 자원 키 마크 업 확장 프로그램이 작동하지 않습니다. 두 개의 동일한 솔루션을 하나는 사용자 정의 컨트롤 라이브러리로 설정하고 다른 하나는 DLL 참조 및 테마/Generic.xaml이있는 일반 클래스 라이브러리로 설정합니다. 구성 요소 리소스 키 태그 확장은 사용자 지정 컨트롤 라이브러리에서 작동하지만 클래스 라이브러리에서는 작동하지 않습니다. –

+0

이전 클래스 라이브러리를 사용자 지정 컨트롤 라이브러리로 바꾸고 모든 클래스를 클래스 라이브러리에서 사용자 지정 컨트롤 라이브러리로 이동하여이 문제를 해결했습니다. 그러나 클래스 라이브러리를 어떻게 개조할지 생각하고 싶습니다. 왜냐하면 아마도 이것을 다시 보게 될 것이기 때문입니다. –

+0

이상한. 다음은 나를 위해 일했다 : 클래스 라이브러리 프로젝트를 만들고, WPF DLL 참조를 추가하고, Themes/Generic.xaml을 추가한다. (UserControl과 ResourceDictionary가되도록 XAML을 만들지 않은 Resource Dictionary 옵션을 추가한다.) 클래스에 CRK를 만든다. 연결된 질문에), generic.xaml에 x : Key가 CRK로 설정된 리소스를 추가했습니다. 나를 위해 컴파일 (VS2008 SP1). Cameron이 언급 한 ThemeInfoAttribute가 필요하지 않았습니다. XAML 파일을 게시 할 가치가 있습니까? – itowlson

답변

6

추가 WPF 참조와 별도로 WPF Custom Control Library 템플릿에는 AssemblyInfo에 추가 특성이 있습니다.

[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) 
)] 

ThemeInfoAttribute은 어셈블리의 유형에 대해 사전이 저장되는 위치를 지정합니다.

+0

이 솔루션을 테스트하지는 않았지만 확실히 이해할 수 있습니다. Themes/generic.xaml 지원을 무시할 수 없다는 것을 기대합니다. –

1

카메론 MacFarland의 답변이 자리를 잡았습니다. 나는 지금 그것을 시험해 보았다.

다음은 솔루션입니다. 일반 DLL 라이브러리 프로젝트에 DLL refs 및 Themes/generic.xaml 파일을 추가하십시오.

[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) 
)] 

재 컴파일 및 구성 요소 리소스 키 태그 확장이 작동해야 다음, 개방의 AssemblyInfo.cs 파일의 끝에 다음 코드를 추가합니다. 클래스 라이브러리에서

태그가 누락되었습니다 :

+0

ComponentResourceKeys 대신 Pack URIs를 사용하여 리소스를 공유 할 수있는보다 간단한 솔루션을 찾았습니다.이 접근법은 다음 문서에 설명되어 있습니다. http://stackoverflow.com/questions/2095031/wpf-sharing-resources-across-assemblies –

2

또 다른 차이점은 .csproj 파일에서 첫 번째 PropertyGroup에 추가 한 후

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 

, 프로젝트의 추가 메뉴가 이제 전형적인 보여줍니다 WPF 파일.

관련 문제