У меня есть сценарий, когда я хочу уменьшить границу элемента управления Button, когда он получает фокус. Это связано с тем, что я не увеличил свойство границы этого элемента управления Button и в то же время не оставил бы кнопку того же размера (высота и ширина). Так что немного усилий в Интернете привело меня к тому, чтобы написать ValueConverter и уменьшить маржу. Но пока я пока не могу доработать рабочий код. Вот что я перемешалосьУменьшить маркер кнопки при фокусировке кнопки
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>
Преобразователь:
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;
}
Приведенные выше результаты кода в StackOverflowException для Margin.Left вызывается рекурсивно. У кого-то есть лучшая идея или реализация для сценария, который я пытаюсь достичь.
Что причина не пытается использовать "LostFocus" и события "GotFocus" в классе Button? Может быть проще, чем IValueConverter. –
Лесли, спасибо за ответ, но не могли бы вы посоветовать мне, как мы могли бы использовать его в этом сценарии. Я не хочу использовать код за файлом после шаблона MVVM. – Jatin
Да, это не будет соответствовать MVVM. Одна вещь после взгляда на ваш XAML, хотя - кажется, что значение для поля Setter для bdrButton не расположено внутри Setter? Или ваша копия/вставка пошла не так. –