我的想法是使用 WPF 默认按钮,使用图像作为不透明蒙版,并让前景画笔更改其颜色。然而,我仍然想拥有背景,这就是问题所在,因为无论我如何设计风格,背景总是会消失。要么这是不可能的,因为不透明蒙版无法更改其目标,只能作用于整个控件,要么我错过了一些东西。
这是我的风格。我试图保持它相当基本。
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Background" Value="{DynamicResource Mono_Darkest}"/>
<Setter Property="Foreground" Value="{DynamicResource Mono_Light}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button_BorderBrush_Normal}"/>
<Setter Property="BorderThickness" Value="{StaticResource Button_BorderThickness_Normal}"/>
<Setter Property="FontFamily" Value="{StaticResource Button_FontFamily_Normal}"/>
<Setter Property="FontWeight" Value="{StaticResource Button_FontWeight_Normal}"/>
<Setter Property="FontSize" Value="{StaticResource Button_FontSize_Normal}"/>
<Setter Property="HorizontalContentAlignment" Value="{StaticResource Button_HorizontalContentAlignment_Normal}"/>
<Setter Property="VerticalContentAlignment" Value="{StaticResource Button_VerticalContentAlignment_Normal}"/>
<Setter Property="Padding" Value="{StaticResource Button_Padding_Normal}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="Border_Part"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Label OpacityMask="{TemplateBinding OpacityMask}"
Foreground="{TemplateBinding Foreground}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Content}" FontFamily="{TemplateBinding FontFamily}"
FontSize="{TemplateBinding FontSize}" FontWeight="{TemplateBinding FontWeight}">
<Label.Style>
<Style TargetType="Label">
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpacityMask, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}, Converter={StaticResource isNull}}"
Value="false">
<Setter Property="Background"
Value="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我所拥有的只是在边框内嵌套一个标签。我想要的是模板(按钮)控件的 opacity 属性只影响标签的 opacity 属性。但这似乎并没有发生。相反,它似乎会像默认按钮样式一样影响所有内容。
我尝试将 OverridesDefaultStyle 设置为 True,但这并没有改变任何东西。
我知道我已经可以通过其他方式做到这一点。但我的目标是制作一个可以使用文本或图像作为前景的快速按钮。图像颜色来自前景画笔。如果我在这里无法得到答案,我很可能只是使用附加属性并将标签不透明蒙版绑定到该属性,但我还是宁愿完全以这种风格来做。
欢迎任何建议。谢谢你。