2015-06-15 130 views
1

我開始學習WPF並且有一些還不清楚對我來說:WPF自定義按鈕

我創造了新的樣式button

<!-- no border button style --> 
<Style x:Key="NoBorderButton" TargetType="Button"> 
    <Setter Property="Foreground" Value="White" /> 
    <Setter Property="Background" Value="Transparent" />    
    <Setter Property="BorderBrush" Value="Transparent" /> 
    <Setter Property="BorderThickness" Value="0" /> 
    <Style.Triggers> 
     <Trigger Property="Control.IsMouseOver" Value="true"> 
      <Setter Property="Control.FontSize" Value="18" /> 
     </Trigger> 
     <Trigger Property="Control.IsMouseOver" Value="true" > 
      <Setter Property="Foreground" Value="LightSkyBlue" /> 
     </Trigger> 
     <Trigger Property="Control.IsMouseOver" Value="false" > 
      <Setter Property="Foreground" Value="White" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

所以這是我的按鈕:

<Button Content="Button" Style="{StaticResource NoBorderButton}"> 

</Button> 

現在搜索解決方案後,刪除所有邊界我發現這template需要添加到button

<Button.Template> 
    <ControlTemplate TargetType="{x:Type Button}"> 
     <ContentPresenter Content="{TemplateBinding Content}"/> 
    </ControlTemplate> 
</Button.Template> 

所以,我有幾個問題:

  1. 這是什麼template在做什麼?
  2. 爲什麼我不能將它添加到我的Windows.Resources裏面創建的style
+0

你會發現是一些控制不孝敬某些屬性。在按鈕中,我認爲BorderThickness是硬編碼的。 – Paparazzi

回答

0

我打算試着直接回答你的問題,但有很多可以在這裏討論。

這個模板在做什麼?

所有控件都具有某種默認模板,預定義的外觀和感覺的什麼控制看起來像

Template覆蓋了您的Button的默認外觀。你實際上做的是完全重新開始一個按鈕的新模板。

因此,例如,您可以爲按鈕看起來像定義一個新模板。例如,它可以是Ellipse內的TextBlock。而不是默認的按鈕模板。

很難說出來,但我想我已經解釋得很清楚了。

爲什麼我不能將它添加到我在Windows.Resources中創建的樣式中?

您可以:

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="Button"> 
      ... 
     </ControlTemplate> 
    </Setter.Value> 
</Setter>