2010-12-19 60 views
0

我约95%的获得我需要的方式,但仍然存在一些问题。基本上我希望所有按钮控件的默认样式(在使用Expression Blend将Button拖动到窗体时使用)的行为如下:在Expression Blend中创建一个自定义的“默认”按钮+ WPF

鼠标悬停 - 将按钮字体的着色更改为渐变,并增加字体大小比控件在其“正常”状态下分配的字体大2个点。尺寸增加非常重要,因为“按钮”没有任何边框,它们只是带有阴影的纯文本。

在点击 - 再次更改字体颜色,去除阴影,使它看起来郁闷(规模将仍然“正常”的字体大小+ 2分)

我现在的方法是给我的一些问题而且在这里发布的代码太多了,所以我希望能够得到一些有更多经验的人的替代方法的建议。

我想宁愿没有一个完全自定义的按钮控件(如“CustomButton”),并简单地覆盖常规默认的“Button”控件的外观/风格,因为它将是唯一类型的按钮应用。但是如果一个新的类/控件是唯一的方法,我会尝试一下。

Ex。

<Button Content="Button1"/> 
<Button Content="Button2" FontSize="18"/> 
<Button Content="Button3" FontSize="24"/> 

在鼠标悬停时,字体大小应比每个按钮的分配大小大2倍。现在我正在通过在按钮的真实文本之上叠加一个TextBlock(带有几个绑定)来完成这项工作,但它还没有完成。

回答

2

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

  1. 如何更改按钮的外观鼠标悬停
  2. 如何自动将此应用到所有按钮

关于# 1:不需要专门的自定义控件 - 在WPF中执行此操作的最简单方法是使用样式(带有用于IsMouseOver的属性触发器)。

至于#2:通过使您的样式成为无键资源(不指定资源键),它将应用于与目标类型匹配的所有控件。

这里是您可以在窗口或应用的资源放在一个样式的例子:

<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%。这可能确实是您想到的更好(也更容易)的解决方案。如果你绝对需要增加的相对字体大小(而不是指定一个绝对的,新的字体大小),这有点棘手,但也可以做到。

+0

我开始做类似之前,但无法获得放大的按钮,仍然居中。左上角应保持在相同的坐标位置,应略微向上/左移几个像素(取决于缩放级别)。它与中心保持在同一位置时的视觉效果并不完全相同。如果我能够通过,这可能会起作用。我甚至没有看触发器,只是状态(这似乎只适用于控件),所以这是我可以玩的新东西。 – Manius 2010-12-19 07:55:38

+0

明白了,如果你点击“使用相对值”,在混合比例下转换,它保持文本居中。比我正在走下的路更简单! – Manius 2010-12-19 07:58:57

+0

实际上,这就是将RenderTransformOrigin属性设置为0.5,0.5是 - 使Button中心成为ScaleTransform的原点。 – gstercken 2010-12-19 08:43:55