2010-12-19 62 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