2010-12-01 45 views
6

.WPF/Silverlight: Personnalisation du contrôle de modèle PARTIELLEMENT

Bonjour les gars,

Pouvons-nous écrire nos contrôles personnalisés de telle sorte que plus tard nous pouvons re-modèle il partiellement? Moyens, sans remplacer l'ensemble ControlTemplate, nous voulons changer/outrepasser certains de son aspect et se sentir?

Une façon, bien sûr, est la suivante: copier le code ControlTemplate de generic.xaml, modifier son apparence et se sentir en partie, et l'utiliser dans votre XAML, comme indiqué ci-dessous:

<MyCustomControl> 
     <MyCustomControl.Template> 
       <ControlTemplate> 

        <!-- paste the copied and modified code from generic.xaml here--> 

       </ControlTemplate> 
     </MyCustomControl.Template> 

     <!--other code--> 

</MyCustomControl> 

Mais le problème avec cette approche est que, nous faisons notre xaml trop prolixe. Et je n'aime vraiment pas ça. Je cherche une solution qui pourrait me sauver de polluer le xaml où j'utilise mon contrôle personnalisé.

Merci d'avance!

.

Répondre

1

Je suis d'accord avec la plupart de ce que Martin dit à propos ControlTemplates être à peu près une chose tout ou rien dans WPF et je me était assez frustré quand je suis arrivé à cette conclusion.

Si vous écrivez votre propre contrôle personnalisé, vous pouvez cependant le rendre plus flexible pour la composition ou l'offre de la possibilité de modéliser les pièces du contrôle. Pour un exemple, vous pouvez regarder le nouveau contrôle WPG DataGrid qui a la capacité de modéliser différentes parties du contrôle. Les autres contrôles de contenu avec en-tête ont souvent un modèle séparé pour le contenu et la partie en-tête du contrôle permettant de remplacer l'un mais pas l'autre.

+0

Je pense que cela répond à ma question dans la mesure du possible. Et puisque ce qui ne peut pas être fait, ne peut pas être répondu, alors je l'accepte! – Nawaz

1

Malheureusement, la modification d'un modèle de contrôle est une proposition tout ou rien. Comme vous le faites remarquer votre XAML devient très verbeux lorsque vous modifiez un modèle de contrôle complexe.

Une approche (qui est assez évidente de toute façon) consiste à créer votre interface utilisateur à partir de petites pièces composables, ce qui, nous l'espérons, facilitera l'utilisation des modèles de contrôle.

Vous avez la possibilité de réutiliser des styles en utilisant le Style.BasedOn Property. Malheureusement, cela ne résout pas votre problème.

1

Je suis également confronté au même problème où faire une petite modification nécessite de copier et coller le modèle de contrôle par défaut complet.

Vous pouvez toutefois définir plusieurs dictionnaires de ressources et utiliser <ResourceDictionary.MergedDictionaries> pour séparer votre balisage des modèles de contrôle.

Votre balisage XAML sera beaucoup plus propre et ressembler à quelque chose comme ceci:

<Style> 
     <Setter Property="Template" Value="{StaticResource SomeRandomTemplate}" /> 
</Style>