2010-03-02 8 views
1

Question générale. J'ai un ControlTemplate raisonnablement complexe. Plusieurs TextBoxes etc. Je ne peux pas utiliser TemplateBinding pour amener toutes les propriétés à la surface afin que je puisse définir tous les styles.Paramètre WPF sur un modèle de contrôle

Existe-t-il un moyen pour un style de «s'inscrire» dans les contrôles d'un contrôle pour définir des valeurs?

J'espère que ma question est claire sans un exemple.

Merci

Répondre

1

La réponse courte est non. Le ControlTemplate est essentiellement une boîte noire, au moins en ce qui concerne XAML (il existe des moyens de décomposer l'arbre visuel en code).

Lorsque vous dites "impossible d'utiliser TemplateBinding", pourquoi? Si vous n'avez pas assez de propriétés disponibles qui peuvent être corrigées en créant des propriétés jointes pour les valeurs que vous voulez passer. Cela suppose que vous templiez un contrôle que vous ne pouvez pas modifier, sinon vous pouvez simplement ajouter de nouvelles propriétés de dépendance.

propriété Attached:

public static class CustomProps 
{ 
    public static readonly DependencyProperty MyNewBrushProperty = DependencyProperty.RegisterAttached(
     "MyNewBrush", 
     typeof(Brush), 
     typeof(CustomProps), 
     new UIPropertyMetadata(Brushes.Green)); 

    public static Brush GetMyNewBrush(DependencyObject target) 
    { 
     return (Brush)target.GetValue(MyNewBrushProperty); 
    } 

    public static void SetMyNewBrush(DependencyObject target, Brush value) 
    { 
     target.SetValue(MyNewBrushProperty, value); 
    } 
} 

et l'utilisation dans le style et le modèle:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="local:CustomProps.MyNewBrush" Value="Red" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(local:CustomProps.MyNewBrush)}"> 
        <ContentPresenter/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Cette méthode permet également encore des valeurs primordiales sur des cas individuels.

+0

Salut John .. merci .. J'ai utilisé DependancyProperties dans un contrôle personnalisé .. mais les propriétés jointes sont une bonne alternative pour moi .. Je suis un développeur expérimenté sur une expérience WPF fasttrack et je vérifiais juste que je maintenant de toutes les manières alternatives de résoudre mon problème. Je note votre réponse 10/10 pour la clarté et concisness..thanks – Adam

Questions connexes