我有一个场景,我想在 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;
}
上面的代码导致堆栈溢出异常,因为 Margin.Left 被递归调用。对于我想要实现的场景,任何人都有更好的想法或实现。