Mon WPF Style Setter utiliser un objet templatebinding?
Je suis en train de faire quelque chose comme ça...
<Style
x:Key="MyBorderStyle"
TargetType="Border">
<Setter
Property="BorderBrush"
Value="{StaticResource MyBorderBrush}" />
<Setter
Property="Background"
Value="{StaticResource MyBackgroundBrush}" />
<Setter
Property="Padding"
Value="{TemplateBinding Padding}" />
</Style>
...mais j'obtiens l'erreur: 'Padding' member is not valid because it does not have a qualifying type name.
Comment dois-je donner une "qualification de type nom"?
Note: La raison pour laquelle je suis en train de faire, c'est que j'aimerais inclure la même Frontière, dans une série d'analogues ControlTemplates.
Grâce.
EDIT:
Bien, j'ai essayé ce...
<Setter
Property="Padding"
Value="{TemplateBinding GridViewColumnHeader.Padding}" />
...et en fait il a compilé, mais alors quand j'ai couru à l'application, j'ai un XamlParseException
:
Cannot convert the value in attribute 'Value' to object of type ''.
J'ai pensé que peut-être admissible Padding
avec GridViewColumnHeader
(qui est le ControlTemplate je veux utiliser ce style avec), mais pas de dés.
EDIT 2:
Bien, d'après la documentation pour TemplateBinding
, il dit:
Liens de la valeur d'une propriété dans un modèle de contrôle à la valeur d'une autre propriété exposée sur la basé sur un modèle de contrôle.
De sorte qu'il semble que je suis en train de faire est tout simplement impossible. Je voudrais vraiment être en mesure de créer réutilisables styles pour certains contrôles dans mes modèles de contrôle, mais je suppose que le modèle de liaisons ne peuvent pas être inclus dans ces styles.
OriginalL'auteur devuxer | 2009-08-29
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner pour le cas où vous êtes à la création de modèles d'un contrôle et que vous souhaitez lier la valeur d'une propriété de ce contrôle à une propriété d'un contrôle à l'intérieur du modèle. Dans votre cas, vous êtes de template de quelque chose (que l'on appellera MyControl), et que le modèle d'inclure une bordure dont le Rembourrage doit être lié à MyControl de rembourrage.
De La documentation MSDN:
Pour quelque raison que ce soit, en précisant TemplatedParent comme la source de la liaison ne semble pas fonctionner dans le Style Setters. Pour obtenir autour de ce que vous pouvez spécifier la relative parent à un AncestorType de contrôle que vous êtes à la création de modèles (qui trouve le TemplatedParent vous fournissant n'ont pas intégré d'autres MyControls dans le MyControl modèle).
J'ai utilisé cette solution quand j'ai essayé de modèle personnalisé d'un Bouton de contrôle dans lequel le (String) Contenu du Bouton besoin d'être lié à la propriété Text du TextBlock dans le ControlTemplate pour le bouton. Voici ce que le code ressemblait:
OriginalL'auteur Shane Arney
Une propriété peut être qualifié simplement en les préfixant avec le nom du type. Par exemple,
Border.Padding
au lieu dePadding
.Cependant, je ne suis pas sûr que ça fait sens pour votre scénario.
TemplateBinding
s sont utilisés à l'intérieur d'un modèle de contrôle.TemplateBinding
s ne peut être utilisé à l'intérieur d'un ControlTemplate...si seulement je pouvais convaincre l'analyseur que j'ai l'intention d'utiliser ce style que dans un ControlTemplate...OriginalL'auteur Kent Boogaart