WPF ControlTemplate: Comment fournir une valeur par défaut pour objet templatebinding?
Je suis en train d'écrire un contrôle WPF qui les sous-classes d'un Bouton. Je puis fournir un style par défaut des Thèmes\générique.xaml, qui ressemble à ceci (simplifié):
<Style TargetType="{x:Type WPFControls:MyButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type WPFControls:MyButton}">
<Button
x:Name="PART_Button"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Je voudrais que l'utilisateur ait la possibilité de changer l'arrière-plan du contrôle, mais s'il ne l'est pas, j'aimerais fournir la valeur par défaut. Comment dois-je faire?
Quand je le fais comme dans la posté code, l'arrière-plan et BorderBrush est nulle (= inexistant) à moins que l'utilisateur spécifie explicitement (ce qui effectivement les forces de l'utilisateur de toujours fournir une certaine valeur), mais le standard de windows contrôles (Bouton j'aime) de fournir une apparence par défaut, qui peuvent être adaptés par l'utilisateur. Comment faire cela dans ma commande?
Merci!
Solution par Michael Morton:
Vous pouvez fournir des valeurs par défaut que les poseurs dans le style:
<Style TargetType="{x:Type TestTemplate:MyButton}">
<Setter Property="Background" Value="Red" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TestTemplate:MyButton}">
<Button
x:Name="PART_Button"
IsEnabled="{TemplateBinding IsEnabled}"
Content="{TemplateBinding Content}"
Background="{TemplateBinding Background}"
/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Utilisation:
<StackPanel>
<TestTemplate:MyButton Background="Blue">Explicitly blue</TestTemplate:MyButton>
<TestTemplate:MyButton>Naturally red</TestTemplate:MyButton>
</StackPanel>
Vous devez vous connecter pour publier un commentaire.
Il vous suffit de définir les setters sur votre style pour les deux propriétés en question.
Par exemple, certaines définitions générales:
Puis, dans votre définition du style:
Attention sur seccond chaîne, j'ai mis la couleur Noire à l'arrière-plan la valeur par défaut.
Lorsque vous déclarez une propriété de dépendance pour vos commandes, vous aussi déclarer la valeur par défaut UIPropertyMetadata
cette propriété par défaut pour les Brosses.Rouge, comme vous pouvez le voir dans la dernière ligne.
l'autre façon pour vous de le faire est par le réglage de la couleur par défaut dans le constructeur de votre contrôle personnalisé, comme le constructeur obtient toujours appelée avant tout les propriétés sont définies par l'utilisateur si l'utilisateur ne parvient pas à définir, ils auraient défaut à la vôtre. En fait, ils se définie par vous, et puis n'importe quel utilisateur paramètre remplace la vôtre. C'est l'esp efficace si vous souhaitez définir les propriétés d'arrière-plan que vous n'êtes pas de la création, de ceux qui sont à venir à partir de votre base de classes héritant de.
Il est également possible de "héritent" de style par défaut de la
Button
de l'élément de la création de l'échantillon de l'instance et le référencement de ses propriétés: