2015-06-15 129 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>