Ich habe ein Szenario, in dem ich den Rand eines Button-Steuerelement reduzieren möchte, wenn es den Fokus erhält. Dies liegt daran, dass ich die Rahmeneigenschaft dieses Button-Steuerelements erhöhen und gleichzeitig die Schaltfläche beibehalten möchte, um dieselbe Größe (Höhe und Breite) beizubehalten. Ein bisschen Aufwand im Web hat mich dazu gebracht, einen ValueConverter zu schreiben und die Marge zu reduzieren. Aber ich bin immer noch nicht in der Lage, den Arbeitscode bis jetzt aufzustellen. Hier ist, was ich durcheinandergebracht haben bisReduzieren Sie den Rand der Schaltfläche, wenn die Schaltfläche fokussiert ist
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;
}
Die obigen Code Ergebnisse in Stackoverflow für die Margin.Left rekursiv aufgerufen werden. Jeder hat eine bessere Idee oder Umsetzung für das Szenario, das ich erreichen möchte.
Was ist der Grund für die nicht versucht, die "Lost" und "GotFocus" Ereignisse in der Button-Klasse zu benutzen? Könnte einfacher sein als ein IValueConverter. –
Leslie, Danke für die Antwort, aber kannst du mir bitte zeigen, wie wir es in diesem Szenario verwenden könnten. Ich möchte den Code hinter der Datei nicht verwenden, der dem MVVM-Muster folgt. – Jatin
Ja, das würde MVVM nicht folgen. Eine Sache nach dem Betrachten Ihrer XAML obwohl - es scheint, dass der Wert für den Setter für BDRButton Rand nicht innerhalb eines Setter befindet? Oder Ihr Kopieren/Einfügen ist falsch gelaufen. –