2009-10-16 4 views
4

내 프로젝트에는 여러 가지 테마가 있습니다.
특정 글꼴/크기/등으로 특정 텍스트 상자를 스킨해야합니다. [색상 차이 없음]
현재 각 테마의 모든 .skin 파일에 <asp:TextBox SkinID="skinned" runat="server".../>을 추가합니다. 마스터 스킨처럼이 텍스트 상자 스킨을 한 곳에 둘 수있는 방법이 있습니까?ASP.NET의 마스터 스킨 파일

답변

0

각 테마 아래에 나열해야하지만 테마별로 하나의 컨트롤 정의 만 나열하면됩니다. 스킨을 컨트롤의 기본 동작으로 지정하려면 SkinID 속성없이 정의를 지정합니다.

+0

감사 ... 내 질문을 특정 텍스트 상자로 수정했습니다. 그러나, 당신은 여전히 ​​내 질문에 대답 ... 그것은 각 스킨 파일에 나열해야합니다 ... – eych

5

ASP.NET 테마 구현시 구현에서 상속이나 계단식이 없기 때문에 많은주의를 끌지 않는 불행한 제한 사항입니다.

옵션 # 1 : 당신은 (제어 정의 자체를 변경하지 않고) 모든 테마가 사용할 수있는 글로벌 피부를 원하는 시나리오에서는 두 가지 옵션을 가지고 VirtualPathProvider

(단점을 사용하여 이 당신없이 미리 컴파일 된 웹 사이트에서 사용할 수 없다는 것입니다 반영 기반 workaround를.) 당신은 피부를 공유 특별한 글로벌 테마 아래 Global.skin 파일을 정의 할 수 있습니다

s는 지켜진다; VirtualPathProvider 당신 것 다음 App_Themes \ * \에 다시 경로의 모든 요청 Global.skinApp_Themes에서

App_Themes 
- Global 
    \Global.skin (primary) 
- ThemeA 
    \Global.skin (empty placeholder) 
- ThemeB 
    \Global.skin (empty placeholder) 

: 당신은 또한뿐만 아니라 다른 모든 테마 아래에 자리 Global.skin 파일을 만듭니다 \ Global \ Global.skin.

옵션 # 2 : 이것은 미리 컴파일 된 웹 사이트의 제한을 피할 수 위의 솔루션의 개정입니다 작업

을 빌드 후 사용; 런타임시 재 라우트를 수행하는 대신 Global \ Global.skin을 다른 모든 테마 폴더에 전파하는 ms 빌드 태스크를 통해 사후 빌드를 적용 할 수 있습니다.

두 옵션을 모두 성공적으로 사용했습니다.