我有一个 WPF 按钮
<Button Style="{StaticResource BrandedButton}">Continue</Button>
它目前的样式如下:
<Style x:Key="BrandedButton" TargetType="{x:Type Button}">
<Setter Property="Background" Value="{StaticResource LowlightBrush}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontFamily" Value="Open Sans Light"/>
<Setter Property="FontSize" Value="35"/>
<Setter Property="Padding" Value="50,10"/>
</Style>
现在,我想控制悬停/按下/等的颜色(而不是其他任何东西),所以我添加了另一个设置器
<Setter Property="Template" Value="{StaticResource BrandedButtonTemplate}"/>
这指向这个 ControlTemplate。我只看过改变按钮结构的例子,例如通过添加边框:
<ControlTemplate x:Key="BrandedButtonTemplate" TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="0">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
但这会破坏之前应用的布局:
相反,如果我只包含ContentPresenter
和省略 wrapping Border
,按钮就会完全消失。
如何在不更改任何其他内容的情况下更改悬停和按下颜色?对于应该是微不足道的任务,最小/最轻的实现是什么?
您的 ControlTemplate 会忽略 Button 的Padding
属性。
添加 ContentPresenter 的 TemplateBinding Margin
:
<ControlTemplate x:Key="BrandedButtonTemplate" TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderThickness="0">
<ContentPresenter
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
...
</ControlTemplate.Triggers>
</ControlTemplate>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句