在Expression Blend + WPF中创建自定义的“默认”按钮

时间:2010-12-19 03:57:25

标签: wpf xaml expression-blend controltemplate

我约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来做到这一点,但它还没有完全正常工作。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你在这里提出两个问题:

  1. 如何在MouseOver上更改按钮的外观
  2. 如何自动将此应用于所有按钮
  3. 关于#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%。这可能确实是你想到的更好(也更容易)的解决方案。如果你绝对需要增加相对字体大小(而不是分配一个绝对的新字体大小),它有点棘手,但也可以做。