我约95%的方式来获得我需要但仍有一些问题。基本上我想要所有Button控件的默认样式(使用Expression Blend将Button拖到窗体时使用)的行为如下:
鼠标悬停 - 将按钮字体的颜色更改为渐变并将字体大小增加2倍,而控件在其“正常”状态下分配的字体大小。大小增加很重要,因为“按钮”没有任何边框,它们只是带有投影的纯文本。
点击 - 再次更改字体着色,删除阴影使其显示为凹陷(尺寸仍然是“正常”字体大小+ 2点)
我目前的方法给了我一些问题,而且这里发布的代码太多了,所以我希望从有更多经验的人那里获得一些替代方法的建议。
我更喜欢没有一个完全自定义的Button控件(比如“CustomButton”)并简单地覆盖常规默认的“Button”控件的外观/样式,因为它将是唯一的类型应用程序中的按钮。但是如果一个新的类/控件是唯一的方法,我会尝试一下。
实施例。
<Button Content="Button1"/>
<Button Content="Button2" FontSize="18"/>
<Button Content="Button3" FontSize="24"/>
在鼠标悬停时,fontsize应比每个按钮的指定大小更大+2。现在我通过在按钮的真实文本(带有一些绑定)上叠加一个TextBlock来做到这一点,但它还没有完全正常工作。
答案 0 :(得分:2)
如果我理解正确,你在这里提出两个问题:
关于#1:不需要专门的自定义控件 - 在WPF中最简单的方法是使用Style(带有IsMouseOver的属性触发器)。
对于#2:通过使Style成为无密钥资源(不指定资源键),它将应用于与目标类型匹配的范围内的所有控件。
以下是您可以在Window或App的资源中放置样式的示例:
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
</Setter.Value>
</Setter>
<Setter Property="Foreground">
<Setter.Value>
<LinearGradientBrush>
<GradientStop Color="CornflowerBlue"
Offset="0"/>
<GradientStop Color="DarkSlateBlue"
Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
<Setter Property="RenderTransformOrigin"
Value=".5,.5"/>
</Style>
请注意,此样式不将字体大小增加2 - 而是将整个按钮缩放5%。这可能确实是你想到的更好(也更容易)的解决方案。如果你绝对需要增加相对字体大小(而不是分配一个绝对的新字体大小),它有点棘手,但也可以做。