2010-03-12 8 views
1

je cela en XAML dans mon style:DataTrigger ne fonctionne pas

<DataTrigger Binding="{Binding Path=ButtonStyle}" Value="CutLeft"> 
    <DataTrigger.Setters> 
    <Setter Property="CornerRadius" TargetName="border" Value="0 11 11 0" /> 
    <Setter Property="CornerRadius" TargetName="border1" Value="0 10 10 0" /> 
    </DataTrigger.Setters> 
</DataTrigger> 

Et ce XAML dans ma fenêtre où j'ai le bouton:

<gui:MyCustomButton ButtonStyle="CutLeft"/> 

Et dans le code MyCustomButton:

public enum ButtonStyles { 
    CutLeft, CutRight, Circular, Normal 
} 

public partial class MyCustomButton 
{ 
    [DefaultValue(ButtonStyles.Normal)] 
    public ButtonStyles ButtonStyle { get; set; } 
} 

Mais cela ne fonctionne pas! Des conseils?

Répondre

3

Je pense qu'il y a quelques problèmes ici. Le premier est que vous ne déclenchez pas de notifications de modification de propriété pour ButtonStyle. Modifiez ButtonStyle à une propriété de dépendance ou implémentez INotifyPropertyChanged sur MyCustomButton et déclenchez l'événement PropertyChanged à partir de l'accesseur ButtonStyle. Dans ce cas, l'approche de la propriété de dépendance est probablement meilleure, car à un certain moment, quelqu'un voudra définir ButtonStyle à travers un Style, et seuls les DP peuvent être stylés. La deuxième est que votre déclencheur de données semble regarder le contexte de données, qui n'est probablement pas le contrôle. (Si vous regardez dans la fenêtre Sortie, vous verrez probablement des erreurs de liaison pour ne pas pouvoir trouver la propriété 'ButtonStyle' sur certains objets de données.) Vous pouvez contourner ce problème en ajoutant RelativeSource={RelativeSource Self} à votre DataTrigger. Cependant, si vous changez ButtonStyle à un DP comme suggéré, vous devez simplement être en mesure d'utiliser un vieux déclenchement simple, qui fonctionne automatiquement contre les propriétés du contrôle étant redécorées:

<Style.Triggers> 
    <Trigger Property="ButtonStyle" Value="CutLeft"> 
    <Setter Property="CornerRadius" TargetName="border" Value="0 11 11 0" /> 
    </Trigger> 
</Style.Triggers> 

(Notez également que vous n » Il est nécessaire de spécifier l'élément Trigger.Setters ou DataTrigger.Setters Le lecteur XAML le remplira pour vous.)

+0

Merci, c'était très utile! – ErikTJ