J'ai un scénario dans lequel je souhaite réduire la marge d'un contrôle Button lorsqu'il reçoit le focus. C'est parce que je ne veux pas augmenter la propriété de bordure de ce contrôle Button et en même temps je ne veux pas que le bouton reste de la même taille (hauteur et largeur). Donc, un peu d'effort sur le web m'a guidé pour écrire un ValueConverter et réduire la marge. Mais je ne suis toujours pas capable de mettre en place le code de travail jusqu'à présent. Voici ce que j'ai pêle-mêleRéduire la marge du bouton lorsque le bouton est mis au point
Xaml
<ControlTemplate.Triggers> <!--ControlTemplate for the Button-->
<Trigger Property="IsFocused" Value="True">
<Setter Property="BorderBrush" TargetName="bdrButton" Value="Wheat"/>
<Setter Property="BorderThickness" TargetName="bdrButton" Value="2"/>
<Setter Property="Margin" TargetName="bdrButton" >
<Setter.Value>
<Binding ElementName="bdrButton" Path="Margin" Converter="{StaticResource N_MarginReducer}">
<Binding.ConverterParameter>
<Thickness>1,1,1,1</Thickness>
</Binding.ConverterParameter>
</Binding>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
Converter:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
Thickness newMargin = new Thickness();
Thickness margin = (Thickness)value;
Thickness reduceBy = (Thickness)parameter;
newMargin.Left = margin.Left - reduceBy.Left;
newMargin.Top = margin.Top - reduceBy.Top;
newMargin.Right = margin.Right - reduceBy.Right;
newMargin.Bottom = margin.Bottom - reduceBy.Bottom;
return newMargin;
}
Les résultats de code ci-dessus dans StackOverflowException pour le Margin.Left étant appelé récursive. N'importe qui a une meilleure idée ou mise en œuvre pour le scénario que j'essaie d'atteindre.
Quelle est la raison pour ne pas essayer d'utiliser les événements "LostFocus" et "GotFocus" dans la classe Button? Peut-être plus facile qu'un IValueConverter. –
Leslie, Merci pour la réponse, mais pouvez-vous s'il vous plaît me guider comment nous pourrions l'utiliser dans ce scénario. Je ne veux pas utiliser le code derrière le fichier suivant le modèle MVVM. – Jatin
Oui, cela ne suivrait pas MVVM. Une chose après avoir regardé votre XAML cependant - il semble que la valeur du Setter pour la marge de bdrButton ne se trouve pas dans un Setter? Ou votre copie/coller a mal tourné. –