223 votes

Ce qui ' la différence entre le ContentControl et ContentPresenter ?

Je ne sais pas quand je dois utiliser au lieu de (et vice-versa). Pour le moment, j’utilise à peu près tout le temps dans mon s. Quand se `` être un meilleur choix ? et pourquoi ?

J’ai lu http://www.beacosta.com/blog/?m=200611 , mais je n’obtiens toujours pas quand/pourquoi je choisirais un sur l’autre.

188voto

Nir Points 18250

ContentControl est une classe de base pour les contrôles qui contiennent d'autres éléments et d'avoir un Content-propriété (par exemple, Button).

ContentPresenter est utilisé à l'intérieur des modèles de contrôle pour afficher le contenu.

ContentControl, lorsqu'elle est utilisée directement (il est censé être utilisé comme une classe de base), est un modèle de contrôle qui utilise ContentPresenter pour afficher son contenu.

EDIT: Mes règles du pouce (ne s'applique pas dans tous les cas, utilisez votre jugement):

  1. À l'intérieur d' ControlTemplate utilisation ContentPresenter
  2. En dehors de l' ControlTemplate (y compris l' DataTemplate et à l'extérieur de modèles) essayez de ne pas utiliser l'un d'eux, si vous en avez besoin, vous devez vous préférez ContentPresenter
  3. Sous-classe ContentControl si vous êtes à la création d'une coutume "lookless" contrôle de l'hôte de contenu et vous ne pouvez pas obtenir le même résultat par la modification d'un mot de contrôle du modèle (qui doit être très rare).

26voto

Thomas Levesque Points 141081

ContentPresenter est généralement utilisé dans un ControlTemplate, comme un espace réservé pour dire « mettez le contenu réel ici ».

Un ContentControl peut être utilisé partout, pas nécessairement dans un modèle. Il ira chercher un DataTemplate définis pour le type de contenu affecté à

11voto

Charles HETIER Points 387

J’ai récemment écrit un post sur mon blog au sujet de ces 2 commandes :

ContentPresenter vs ContentControl

La ContentPresenter.ContentSource est réellement ce qui fait la plus grande différence entre les 2 classes.

Espérons que cela a aidé

2voto

C'est une vieille question, mais j'étais en train de terminer le développement d'une animation Vignette de Contrôle, basée sur un modèle pour une application universelle, regardez ce code à partir de l'ancien Téléphone WP7/8 SDK:

<ContentControl x:Name="contentControl" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch">
    <ContentPresenter x:Name="contentPresenter" CacheMode="BitmapCache"/>
</ContentControl>

Ici vous pouvez voir le ContentControl est le Contenant et le Présentateur de l'affichage d'un contenu. Dans la plupart des cas, la ControlTemplate sera le Contenant, mais si vous voulez dans votre ControlTemplate dans un autre récipient, vous pouvez mettre un supplément Contenant: ContentControl dans et pour la présentation d'un contenu distinct ContentPresenter. Si vous n'avez pas besoin d'un récipient séparé, utilisez ControlTemplate et ControlPresenters pour l'affichage des blocs de contenu, au moins, c'est ce que les gars de chez Microsoft l'a fait quand ils ont développé le WP7/8 SDK. Le ContentControl peut également être utilisé pour l'affichage d'un contenu, mais alors il sert à la fois de contenant et de l'animateur. Ainsi, dans l'exemple de code ci-dessus son but est découpé dans un Récipient et le Présentateur. Dans la dynamique des échantillons, vous pouvez afficher le conteneur (il peut en avoir un vide d'arrière-plan ou quelque chose des thats pas encore là) et ensuite remplir dynamiquement avec le présentateur de contenu. Un conteneur a des dimensions (largeur,la hauteur, etc.), vous mettez ces propriétés sur le conteneur de contrôle et de présenter le contenu. Dans l'exemple de la ContentControl détermine ce qui doit être fait avec le présentateur de contenu.

0voto

Wayne Lo Points 1128

Parfois, un exemple est plus facile que théorique jargon. Dans un MME site web (faites Défiler vers le bas: http://msdn.microsoft.com/en-us/library/system.windows.controls.contentpresenter(v=vs. 110).aspx), il utilise un bouton comme un exemple. Un Bouton a un ContentControl, qui permet de mettre en place un contrôle ou un contrôle personnalisé qui pourrait être une Image, un Texte, Case à cocher, StackPanel, Grille, que ce soit.

Après la personnalisation de Bouton, maintenant sur le Xaml, vous pouvez écrire

<my:Button>
   <my:Button.Content>
      <my:AnotherControl>
   </my:Button.Content>
</my:Button>

Dans l'exemple ci-dessus le code de la fonction "ma:Bouton.Contenu" est le ContentControl. Le AnotherControl sera la place de ce que vous aviez spécifiés où la ContentPresenter est.

De même, lorsque compare zone de texte et TextBlock, la zone de texte a un ContentPresenter pour vous à des choses des choses comme le Bouton ci-dessus exemple, alors qu'un TextBlock qui ne fonctionne pas. Un TextBlock seulement vous permet d'entrer du texte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X