2009-10-16 5 views
4

Mon projet a plusieurs thèmes avec des couleurs différentes.
J'ai besoin d'habiller certaines zones de texte avec une police/taille/etc .. [pas de différence de couleur]
Actuellement, j'ajoute <asp:TextBox SkinID="skinned" runat="server".../> à tous les fichiers .skin sous chaque thème. Existe-t-il un moyen de placer cet habillage de zone de texte au même endroit, comme un habillage principal?fichier d'habillage principal dans ASP.NET

Répondre

0

Vous devrez le lister sous chaque thème, mais il vous suffit de lister une définition de contrôle par thème. Si vous voulez qu'un habillage soit le comportement par défaut d'un contrôle, spécifiez la définition sans la propriété SkinID.

+0

merci ... J'ai modifié ma question pour être certaines textboxes. Cependant, vous avez toujours répondu à ma question ... il doit être listé dans chaque fichier skin ... – eych

5

L'absence d'héritage ou de cascade dans l'implémentation ASP.NET Themes est une limitation regrettable qui ne reçoit pas beaucoup d'attention. Dans les scénarios où vous souhaitez avoir une peau globale disponible pour tous thèmes (sans changer la définition de contrôle lui-même), vous avez deux options:

Option 1: Utilisez un VirtualPathProvider

(L'inconvénient de ceci est que vous ne pouvez pas l'utiliser sur les sites Web précompilés sans une réflexion basée sur workaround.)

vous pouvez définir un fichier Global.skin sous un thème spécial mondial où la peau partagée s sont conservés; vous aussi créer un espace réservé fichier Global.skin sous tous les autres thèmes ainsi:

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

Dans le VirtualPathProvider alors vous réacheminer toutes les demandes de App_Themes \ * \ Global.skin à App_Themes \ Global \ Global.skin.

Option 2: Utilisez un post-construction Tâche

Ceci est un amendement à la solution ci-dessus qui évite la limitation des sites précompilé; Au lieu d'effectuer le réacheminement à l'exécution, vous pouvez l'appliquer après la génération via une tâche ms-build qui propage simplement Global \ Global.skin vers tous les autres dossiers de thème.

J'ai utilisé les deux options avec succès.

Questions connexes